[Python] CSVファイルの表をはてな記法の表に変換する
2020/07/16追記
オンラインコンバータを作ってみた。
cyanatlas.hatenablog.com
はじめに:はてな記法の表とは
はてなブログなどにははてな記法という独自の言語があり、これを使うことでHTMLファイルを編集せずにWEBページが書けます。
例えば次のように書けば表が表示されます。
|*名前|*色|*個数| |りんご|赤|1| |みかん|だいだい|2|
名前 | 色 | 個数 |
---|---|---|
りんご | 赤 | 1 |
みかん | だいだい | 2 |
問題点:はてな記法で表を書く面倒さ
はてな記法で表を書くのは、HTMLで表を書くより楽だが、それでもやや面倒であると感じる。理由は次の二つ。
- 編集中は列(縦のライン)が揃わないので、どこを編集しているのか分かりにくい
- WEBページの表をコピペできない
解決策としては次の二つが考えられる。
一つ目の方法については複数のWEBページで紹介されていたので各自検索してほしい。
一つ目の方法で解決できるとは言え、表組みのためだけに、表組以外は簡単に書けるはてな記法をやめたくないという私のような人もいるだろう。そこで、この記事は二つ目の方法を説明する。
解決策:CSVファイルをはてな記法に変換する(Python)
- Excelなどを使ってCSVファイルを作成する(エンコードUTF8-BOM、コンマ区切りとすれば、後に示すPythonコードをそのまま使えるはず)。
- 後に示すPythonコードで、FILENAME変数を変換したいCSVファイルの名前(あるいは相対パス)に変更する。
- Pythonコードを実行して、はてな記法を含むtxtファイルを出力する(ファイル名は
hatena_FILENAME.txt
)。
コードを示す。
import os import csv FILENAME = 'test.csv' def main(): res = '' with open(FILENAME, mode='r', encoding='utf-8-sig') as f: csvreader = csv.reader(f, delimiter=',') head = True for row in csvreader: for cell in row: if head: res += '|' + '*' + cell else: res += '|' + cell res += '|\n' head = False outputfilename = 'hatena_' + os.path.splitext(os.path.basename(FILENAME))[0] + '.txt' with open(outputfilename, mode='w', encoding='utf8') as f: f.write(res) return if __name__ == '__main__': main()