ファイル名が一部不明な場合のリネーム (2017/04/08)

ファイル名が一部不明な場合にリネームするコードをPythonで書いてみる。

例えば「text@@@@.txt」というファイルがあるとする。これを「text.txt」にリネームしたい。だが、ファイル名が「text」から始まっているのは知っているが、「@@@@」が何か分からない場合、どうするか。

ワイルドカードを使って、「text*.txt」としてもエラーになる。「*.txt」ならエラーにはならないが、それでは拡張子がtxtのすべてのファイルが対象になってしまう。簡単そうで、意外と難しい(私だけ?)。

あれこれ試行錯誤した結果、あまりすっきりはしないが、一応の方法を見つけた。例として、作業ディレクトリに「text1234.txt」ファイルがあるとして、これを「text.txt」にリネームする。だが、「1234」の部分が正確にはどうであるかは分かっていない。

import glob
import os
new_name = 'text.txt'
for old_name in glob.glob('text*.txt'):
    os.rename(old_name, new_name)


「text1234.txt」ファイルが「text.txt」ファイルにリネームされる。「なんだ、「text*.txt」でもできるじゃないか」と思われるかもしれない。だが、これはglobを噛ませているからできるのである。

単にos.rename('text*.txt', new_name)とやるとエラーになる。

コメント

非公開コメント