追記20240902 最近のPythonではos.listdir
やos.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に変換できない文字を削除したいファイルを含むディレクトリのパス>)