Python

Pythonで「UTF-8 with BOM」のファイルを読み書きするには?

Pythonで「UTF-8 with BOM」のファイルを読み書きするには?

気がついたら、将棋の棋譜ファイルがたくさんあったので整理することに。
kifファイルを扱うにあたり、気をつけたいのが文字コードです。
81dojoで読み込むには「UTF-8」、Kifu for Windowsで読み込むには「BOM付きUTF-8」、昔に保存したものは「Shift_JIS」とバラバラ。
幸い、81dojoは「BOM付きUTF-8」でも読み込めるので、これに揃えることにしました。

じゃあ、ファイル数はどのくらいかなぁ、と、調べたら、なんと1万超え!
手作業でやる元気はありません。
勉強中のPythonでできそうなので、やり方をまとめました。

 

コードの書き方は?

open()の引数に「encoding='utf_8_sig'」を使います。

# 「UTF-8 with BOM」のファイルを読み込む
read_filename = '【読み込みたいファイルのパス】'
 
with open(read_filename,'r',encoding='utf_8_sig') as f:
    print(f.read())
 
# 「UTF-8 with BOM」のファイルを保存する
write_filename = '【保存したいファイルのパス】'
with open(write_filename,'w',encoding='utf_8_sig') as f:
    f.write('test')

公式ドキュメントによると、文字コードを「UTF-8」に指定するとき、「utf_8」だけでなく、「U8」,「UTF」,「utf8」「cp65001(バージョン 3.8以上)」の別名も使えますが、「UTF-8 with BOM」は「utf_8_sig」しか使えません。

 

まとめ

Pythonで「UTF-8 with BOM」のファイルを扱うには、open()の引数に「encoding='utf_8_sig'」を使えば良いです。
試しに、連番になっている1000のkifファイルを「BOM付きUTF-8」に変換したら、1分もかからずに終わってびっくりしました。
Pythonを勉強しておいて良かったです。

-Python
-, , , , , , , , , , ,