今回はPythonでファイル名を一括で連番にする方法についてご紹介します!
大量のファイルをとりあえず連番で揃えたいとき、ありませんか?
ありますよね??
実は、ファイル名を連番で一括変換する方法はたくさんあります。
例えば、WindowsならPowerShell、LinuxならBashなどのシェルスクリプトを利用する方法などがあります。
Linuxのコマンドを使ってワンラインでファイルの一括リネームを行う方法は下の記事を参照してください!
ちなみに、PowerShellの一括リネームは結構面倒くさいです。
さて、このようにコマンドでも簡単に実現できるファイルの一括リネームですが、リネーム処理をPythonプログラムの中に組み込みたいときは、やっぱりPythonで書きたいですよね。
そんなあなたのために、Pythonでサクッとファイルをリネームする方法について紹介します!
もくじ
Pythonで連番一括リネーム
とりあえず先にコードを貼っておきます。
シンプルですね。
import glob, os #今回はPNGファイルのみを取り出してリネーム files = glob.glob("<ディレクトリ名>/*.png") i = 1 for old in files: name = "{0:03d}".format(i) new_name = "<ディレクトリ名>/" + name + ".png" os.rename(old, new_name) i += 1
まずは4行目、globメソッドで、指定したディレクトリのPNG形式のファイルパスをリストで取得します。
globメソッドについては下の項で紹介しますが、ディレクトリ配下のファイルパスをすべて取得する場合は、.pngを削除してください。
また、pngの部分を書き換えると、他のファイル形式の指定も可能です。
さて、7行目以降では、リストで取り出したファイルパスに対して、連番で新しい名前をつけています。
ファイル名の変更には、osライブラリのrenameメソッドを利用します。
たったこれだけで、配下の全PNGファイルを連番でリネームすることができます。
簡単ですね!
globメソッドについて
では、globメソッドについて馴染みの少ない方がいるかと思うので、簡単に紹介します。
globメソッドは、指定されたパターンに一致するすべてのパス名を見つけ出すための標準ライブラリです。
それだけです。
今回くらいの簡単なパス抽出であれば、osライブラリのlistdirメソッドでもいいかなとは思ったのですが、あえてglobを使ってみました。
listdirメソッドと比較するとglobは、ワイルドカードを使った条件指定や、サブディレクトリを含めた再帰的な検索ができるのが強みです。
listdirメソッドはそのまま使うと配下のディレクトリ名まで一緒に取得してくるので、ファイルのみを取り出したい場合や、特定の拡張子を持つものだけを取り出したい場合にはglobを使うのが良さそうです。
まとめ
そんな感じで、Pythonを使って簡単にファイル名を一括リネームする方法について紹介しました。
Pythonは便利なライブラリが抱負なので、ちょっとした作業をサクサク書けるのが楽でいいですね。