将棋クラブ24の棋譜がshift_jisなのでまとめてutf-8に変換したい
将棋クラブ24では棋譜の一括ダウンロードをユーザーページから行える。ダウンロードするとzipファイルが落ちてくる。それはいいのだが、棋譜の文字コードがshift_jisなのでwindowsユーザーではない私の環境には適さない。そのため、一括で変換してしまうことにした。変換したファイルは再度zipにしておくことにした。もっとスッキリしたコードにしたい。これも練習。
import tempfile import shutil import codecs import os import sys from pathlib import Path base_path = Path(os.environ.get('HOME')) def open_archive(src_dir, zip_file): shutil.unpack_archive(str(zip_file), src_dir.name) def make_archive(dst_dir, zip_file): os.chdir(dst_dir.name) filename = 'utf8_' + zip_file.stem new_zip_file = base_path / filename shutil.make_archive(base_name=str(new_zip_file), format='zip') def to_utf8(src, dst): sf = codecs.open(src, 'r', encoding='shift_jis') uf = codecs.open(dst, 'w', encoding='utf-8') for line in sf: uf.write(line) sf.close() uf.close() def convert_run(src_dir, dst_dir, zip_file): open_archive(src_dir, zip_file) files_dir = Path(src_dir.name) new_files_dir = Path(dst_dir.name) for fname in files_dir.iterdir(): to_utf8(fname, new_files_dir.joinpath(fname.name)) return True def main(): zip_file = Path(sys.argv[-1]) if zip_file: src_dir = tempfile.TemporaryDirectory() dst_dir = tempfile.TemporaryDirectory() ret = convert_run(src_dir, dst_dir, zip_file) if ret: make_archive(dst_dir, zip_file) src_dir.cleanup() dst_dir.cleanup() if __name__ == '__main__': main()
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
- 作者: Al Sweigart,相川愛三
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/06/03
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
- 作者: 柴田淳
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/12/22
- メディア: Kindle版
- この商品を含むブログを見る