{"id":127648,"date":"2022-08-29T19:18:12","date_gmt":"2022-08-29T19:18:12","guid":{"rendered":"https:\/\/blog.finxter.com\/?p=626351"},"modified":"2022-08-29T19:18:12","modified_gmt":"2022-08-29T19:18:12","slug":"python-convert-markdown-table-to-csv","status":"publish","type":"post","link":"https:\/\/sickgaming.net\/blog\/2022\/08\/29\/python-convert-markdown-table-to-csv\/","title":{"rendered":"Python Convert Markdown Table to CSV"},"content":{"rendered":"\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-top\" data-payload=\"{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;626351&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;top&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;1&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;5&quot;,&quot;greet&quot;:&quot;Rate this post&quot;,&quot;legend&quot;:&quot;5\\\/5 - (1 vote)&quot;,&quot;size&quot;:&quot;24&quot;,&quot;width&quot;:&quot;142.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} - ({count} {votes})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}\">\n<div class=\"kksr-stars\">\n<div class=\"kksr-stars-inactive\">\n<div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 5px\">\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n<\/p><\/div>\n<div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 5px\">\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n<\/p><\/div>\n<div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 5px\">\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n<\/p><\/div>\n<div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 5px\">\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n<\/p><\/div>\n<div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 5px\">\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"kksr-stars-active\" style=\"width: 142.5px;\">\n<div class=\"kksr-star\" style=\"padding-right: 5px\">\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n<\/p><\/div>\n<div class=\"kksr-star\" style=\"padding-right: 5px\">\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n<\/p><\/div>\n<div class=\"kksr-star\" style=\"padding-right: 5px\">\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n<\/p><\/div>\n<div class=\"kksr-star\" style=\"padding-right: 5px\">\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n<\/p><\/div>\n<div class=\"kksr-star\" style=\"padding-right: 5px\">\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<div class=\"kksr-legend\" style=\"font-size: 19.2px;\"> 5\/5 &#8211; (1 vote) <\/div>\n<\/div>\n<h2>Problem<\/h2>\n<p>Given the following Markdown table stored in <code>'my_file.md'<\/code>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"md\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">| 1 | 2 | 3 | 4 | 5 |\n|-------|-----|------|------|------|\n| 0 | 0 | 0 | 0 | 0 |\n| 5 | 4 | 3 | 2 | 1 |\n| alice | bob | carl | dave | emil |<\/pre>\n<p class=\"has-global-color-8-background-color has-background\"><img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/14.0.0\/72x72\/1f40d.png\" alt=\"\ud83d\udc0d\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <strong>Python Challenge<\/strong>: How to convert the Markdown table to a CSV file <code>'my_file.csv'<\/code>?<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"585\" height=\"268\" src=\"https:\/\/blog.finxter.com\/wp-content\/uploads\/2022\/08\/image-97.png\" alt=\"\" class=\"wp-image-626397\" srcset=\"https:\/\/blog.finxter.com\/wp-content\/uploads\/2022\/08\/image-97.png 585w, https:\/\/blog.finxter.com\/wp-content\/uploads\/2022\/08\/image-97-300x137.png 300w\" sizes=\"auto, (max-width: 585px) 100vw, 585px\" \/><\/figure>\n<\/div>\n<h2>Solution<\/h2>\n<p class=\"has-base-background-color has-background\">To convert a Markdown table <code>.md<\/code> file to a CSV file in Python, first read the Markdown table file by using the <code>f.readlines()<\/code> method on the <a href=\"https:\/\/blog.finxter.com\/python-open-function\/\" data-type=\"post\" data-id=\"24793\" target=\"_blank\" rel=\"noreferrer noopener\">opened<\/a> file object <code>f<\/code>, by <a href=\"https:\/\/blog.finxter.com\/python-string-split\/\" data-type=\"post\" data-id=\"26097\" target=\"_blank\" rel=\"noreferrer noopener\">splitting<\/a> along the markdown table separator symbol <code>'|'<\/code>. Clean up the resulting list (row-wise) and add all rows to a single <a href=\"https:\/\/blog.finxter.com\/python-list-of-lists\/\" data-type=\"post\" data-id=\"7890\" target=\"_blank\" rel=\"noreferrer noopener\">list of lists<\/a>. Then create a DataFrame from the list of lists and use the <code><a rel=\"noreferrer noopener\" href=\"https:\/\/blog.finxter.com\/pandas-dataframe-to_csv-method\/\" data-type=\"post\" data-id=\"344277\" target=\"_blank\">DataFrame.to_csv()<\/a><\/code> method to write it to a CSV file.<\/p>\n<p>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:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"4, 23\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import pandas as pd # Convert the Markdown table to a list of lists\nwith 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)\ndf = pd.DataFrame(rows)\ndf.to_csv('my_file.csv', index=False, header=False) <\/pre>\n<p>The resulting CSV file <code>'my_file.csv'<\/code>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">1,2,3,4,5\n0,0,0,0,0\n5,4,3,2,1\nalice,bob,carl,dave,emil\n<\/pre>\n<h2>Learn More<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/14.0.0\/72x72\/1f30d.png\" alt=\"\ud83c\udf0d\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <strong>Background Tutorials<\/strong>: The code uses a multitude of Python features. Check out these articles to learn more about them:<\/p>\n<ul class=\"has-base-background-color has-background\">\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/blog.finxter.com\/python-open-function\/\" data-type=\"post\" data-id=\"24793\" target=\"_blank\">Python <code>open()<\/code> function<\/a><\/li>\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/blog.finxter.com\/introduction-to-slicing-in-python\/\" data-type=\"post\" data-id=\"731\" target=\"_blank\">Python slicing<\/a><\/li>\n<li><a href=\"https:\/\/blog.finxter.com\/list-comprehension\/\" data-type=\"post\" data-id=\"1171\" target=\"_blank\" rel=\"noreferrer noopener\">Python List Comprehension<\/a><\/li>\n<li><a href=\"https:\/\/blog.finxter.com\/python-list-append\/\" data-type=\"post\" data-id=\"6605\" target=\"_blank\" rel=\"noreferrer noopener\">Python List <code>append()<\/code> Method<\/a><\/li>\n<li><a href=\"https:\/\/blog.finxter.com\/python-list-concatenation-add-vs-inplace-add-vs-extend\/\" data-type=\"post\" data-id=\"8676\" target=\"_blank\" rel=\"noreferrer noopener\">Python List Concatenation<\/a><\/li>\n<li><a href=\"https:\/\/blog.finxter.com\/how-to-create-a-dataframe-in-pandas\/\" data-type=\"post\" data-id=\"16764\" target=\"_blank\" rel=\"noreferrer noopener\">Python Create DataFrame<\/a><\/li>\n<li><a href=\"https:\/\/blog.finxter.com\/pandas-dataframe-to_csv-method\/\" data-type=\"post\" data-id=\"344277\" target=\"_blank\" rel=\"noreferrer noopener\">Python Pandas <code>to_csv()<\/code> Method<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>5\/5 &#8211; (1 vote) Problem Given the following Markdown table stored in &#8216;my_file.md&#8217;: | 1 | 2 | 3 | 4 | 5 | |&#8212;&#8212;-|&#8212;&#8211;|&#8212;&#8212;|&#8212;&#8212;|&#8212;&#8212;| | 0 | 0 | 0 | 0 | 0 | | 5 | 4 | 3 | 2 | 1 | | alice | bob | carl | dave [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[857],"tags":[73,468,528],"class_list":["post-127648","post","type-post","status-publish","format-standard","hentry","category-python-tut","tag-programming","tag-python","tag-tutorial"],"_links":{"self":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/127648","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/comments?post=127648"}],"version-history":[{"count":0,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/127648\/revisions"}],"wp:attachment":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/media?parent=127648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/categories?post=127648"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/tags?post=127648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}