Python Convert Markdown Table to CSV

5/5 - (2 votes)

Problem

Given the following Markdown table stored in 'my_file.md':

| 1     | 2   | 3    | 4    | 5    |
|-------|-----|------|------|------|
| 0     | 0   | 0    | 0    | 0    |
| 5     | 4   | 3    | 2    | 1    |
| alice | bob | carl | dave | emil |

🐍 Python Challenge: How to convert the Markdown table to a CSV file 'my_file.csv'?

Solution

To convert a Markdown table .md file to a CSV file in Python, first read the Markdown table file by using the f.readlines() method on the opened file object f, by splitting along the markdown table separator symbol '|'. Clean up the resulting list (row-wise) and add all rows to a single list of lists. Then create a DataFrame from the list of lists and use the DataFrame.to_csv() method to write it to a CSV file.

An example is shown in the following script that you can use for your own conversion exercise by replacing only the in-file and out-file names highlighted below:

import pandas as pd

# Convert the Markdown table to a list of lists
with open('my_file.md') as f:
    rows = []
    for row in f.readlines():
        
        # Get rid of leading and trailing '|'
        tmp = row[1:-2]

        # Split line and ignore column whitespace
        clean_line = [col.strip() for col in tmp.split('|')]

        # Append clean row data to rows variable
        rows.append(clean_line)

    # Get rid of syntactical sugar to indicate header (2nd row)
    rows = rows[:1] + rows[2:]


print(rows)
df = pd.DataFrame(rows)
df.to_csv('my_file.csv', index=False, header=False)

The resulting CSV file 'my_file.csv':

1,2,3,4,5
0,0,0,0,0
5,4,3,2,1
alice,bob,carl,dave,emil

Learn More

🌍 Background Tutorials: The code uses a multitude of Python features. Check out these articles to learn more about them: