potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

Python 3.4 あるディレクトリに存在するファイルの名前からShift_JISで表現できない文字を削除する

あるディレクトリに存在するファイルの名前(UTF-16)からShift_JISで表現できない文字を削除します。実際にはファイル名をUTF-16で取得して、Shift_JISへ変換できない文字を「?」に置き換えつつShift_JISに変換して、またUTF-16に戻します。ファイル名の保存形式がUTF-16である前提で処理しています(昨今のWindows)。

以前の投稿で記述したクラス(ChDir)を使っています。ChDirクラスはchdir.pyにある前提です。

#coding: utf-8
from chdir import ChDir

def remove_invalid_sjis_chars_from_filename(path):
    with ChDir(path):
        for filename in os.listdir("."):
            encoded = filename.encode("Shift_JIS", errors="replace").replace("?", "").encode("UTF-16")
            if filename != encoded:
                os.rename(filename, encoded)

if __name__ == "__main__":
    remove_invalid_sjis_chars_from_filename(<Shift_JISに変換できない文字を削除したいファイルを含むディレクトリのパス>)