[Python] CSVファイルの表をはてな記法の表に変換する

2020/07/16追記
オンラインコンバータを作ってみた。
cyanatlas.hatenablog.com

はじめに:はてな記法の表とは

はてなブログなどにははてな記法という独自の言語があり、これを使うことでHTMLファイルを編集せずにWEBページが書けます。

例えば次のように書けば表が表示されます。

|*名前|*色|*個数|
|りんご|赤|1|
|みかん|だいだい|2|
名前 個数
りんご 1
みかん だいだい 2

hatenadiary.g.hatena.ne.jp

問題点:はてな記法で表を書く面倒さ

はてな記法で表を書くのは、HTMLで表を書くより楽だが、それでもやや面倒であると感じる。理由は次の二つ。

  1. 編集中は列(縦のライン)が揃わないので、どこを編集しているのか分かりにくい
  2. WEBページの表をコピペできない

解決策としては次の二つが考えられる。

  1. はてな記法をやめてHTML編集にする(WEBページやExcelの表をコピペできるようになる)。
  2. Excelの表をプログラムではてな記法に変換する。

一つ目の方法については複数のWEBページで紹介されていたので各自検索してほしい。

一つ目の方法で解決できるとは言え、表組みのためだけに、表組以外は簡単に書けるはてな記法をやめたくないという私のような人もいるだろう。そこで、この記事は二つ目の方法を説明する。

解決策:CSVファイルをはてな記法に変換する(Python

  1. Excelなどを使ってCSVファイルを作成する(エンコードUTF8-BOM、コンマ区切りとすれば、後に示すPythonコードをそのまま使えるはず)。
  2. 後に示すPythonコードで、FILENAME変数を変換したいCSVファイルの名前(あるいは相対パス)に変更する。
  3. 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()

オンラインコンバータ

作ってみた。

cyanatlas.hatenablog.com