potisanのプログラミングメモ

プログラミング素人です。昔の自分を育ててくれたネット情報に少しでも貢献できるよう、情報を貯めていこうと思っています。Windows環境のC++やC#がメインです。

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

追記20240902 最近のPythonではos.listdiros.renameの替わりにpathlibを使えます。

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

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

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に変換できない文字を削除したいファイルを含むディレクトリのパス>)