🐍

tsvファイルからmarkdown形式の表を作る

2024/07/06に公開

概要

  • Exelで作成した表をmarkdown形式にしてBaklogに貼り付けたい
  • Excelは複数セルを選択してコピペするとタブで区切られるので、tsvファイルからmarkdown形式にする仕組みがあればいいと思った
  • pythonのpandasを使って実現できた

コードと実行結果

実行には pandastabulate が必要になります。

pip install pandas
pip install tabulate

コード

# tsv_to_markdown_table.py
import pandas as pd


def tsv_to_markdown_table(tsv_file_path):
    # Read TSV file into a DataFrame
    df = pd.read_csv(tsv_file_path, sep='\t')

    # Convert DataFrame to markdown table
    markdown_table = df.to_markdown(index=False)

    return markdown_table


# Example usage
tsv_file_path = 'example.tsv'  # Replace with your TSV file path
markdown_table = tsv_to_markdown_table(tsv_file_path)
print(markdown_table)

example.tsv

Name    Age    Occupation
Alice   30     Engineer
Bob     25     Designer
Charlie 35     Teacher
$ python3 tsv_to_markdown_table.py 
| Name    Age    Occupation   |
|:----------------------------|
| Alice   30     Engineer     |
| Bob     25     Designer     |
| Charlie 35     Teacher      |

zennでの表示はこんな感じ

Name Age Occupation
Alice 30 Engineer
Bob 25 Designer
Charlie 35 Teacher

ちょっと中身の話

pandas.DataFrame.to_markdowntablefmtパラメータを指定すると、出力形式を選べるっぽい。
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_markdown.html

# tablefmt="grid"
+-----------------------------+
| Name    Age    Occupation   |
+=============================+
| Alice   30     Engineer     |
+-----------------------------+
| Bob     25     Designer     |
+-----------------------------+
| Charlie 35     Teacher      |
+-----------------------------+

# tablefmt="html"
<table>
<thead>
<tr><th>Name    Age    Occupation  </th></tr>
</thead>
<tbody>
<tr><td>Alice   30     Engineer    </td></tr>
<tr><td>Bob     25     Designer    </td></tr>
<tr><td>Charlie 35     Teacher     </td></tr>
</tbody>
</table>

中身としては、 tabulate を呼び出しているだけなので、 tablefmt に指定できる値はtabulateの仕様を確認するのがよい。
https://pypi.org/project/tabulate/

Discussion