今回は『ファイル名を変更するプログラム』を作ってみたいと思います。
では、始めてみましょう。
1つのファイル名を変更するプログラム
まずは『1つのファイル名を変更する』プログラムを作成します。
import os filefolder = 'C:/rabbit/' origin ='cat1.jpg' chng ='rabit1.jpg' fileorigin = filefolder + origin filechange = filefolder + chng os.rename(fileorigin, filechange) print("プログラム終了")
1行目:ライブラリosをインポートします。
3行目:画像を保存しているフォルダ名です。
4,5行目:originは変更前のファイル名、chngは変更後のファイル名です。
7、8行目:fileoriginは変更前のパスを含めたファイル名、filechangeは変更後のパスを含めたファイル名です。
10行目(重要):os.renameでファイル名を変更します。第一引数に変更前のファイル名を、第二引数に変更後のファイル名を入力して下さい。
これを実行するとファイル名が変更されます。では、このプログラムを拡張していきましょう。
カスタマイズ:ファイルの存在を確認するプロセスを作る
先ほどのプログラムをもう一度実行させると、下記のエラーが表示されます。
FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。:
これはファイル名が存在していない時に出るエラーで、プログラムが実行されません。
プログラムのコンパイル時にエラーを出すのではなく、プログラム内でファイルの存在を確認し、存在していなければ存在していないことをメッセージで出した方がきれいですよね。
下記のプログラムを加えます。
if (os.path.exists(fileorigin)): os.rename(fileorigin, filechange) else: print(f'{fileorigin}が見つかりません')
1行目:os.path.existsでファイルが存在しているかを確認します。ファイルが存在していればTrue、存在していなければFalseが戻り値になります。
ファイルが無ければ、『XXが見つかりません』とメッセージが出るので、使う側に状況を伝えるのに親切ですよね。
フォルダの全ファイル名の確認
上記のプログラムでは、既知のファイル名を変更するという事をしました。
これでは、フォルダ内にファイルが多数あれば、プログラムに一つ一つ名前と関数を加えていくのは無理があります。
そこで、プログラムで『フォルダ内のファイル名をすべて取得』していくようにします。
for count, filename in enumerate(os.listdir(filefolder)): print(count, filename)
1行目:os.listdir(filefolder)はフォルダ内のファイルを全て取得しリスト化する関数です。そして、enumerateはリスト化した物に対してインデックスを加えます。countにはインデックス番号、filenameにはファイル名が保存されます。
実行結果は下記になります。インデックスは0から始まることに注意して下さい。
0 cute-2500929_640.jpg 1 lop-eared-314881_640.jpg 2 rabbit-1422882_640.jpg 3 rabbit-3917617_640.jpg
これでフォルダ内のファイル名が分かったので、順番にrabit1.jpgという風にリネームしていくだけです。
コードの書き直し
全ファイル名をリネーム出来るように、コード全体をカスタマイズしましょう。先ほどのファイルが存在の確認は不要になったので削除します。
全コードは下記になります。
import os filefolder = 'C:/rabbit/' chng ='rabit' fileext = '.jpg' for count, origin in enumerate(os.listdir(filefolder)): fileorigin = filefolder + origin filecount = count + 1 filechange = filefolder + chng + str(filecount) + fileext os.rename(fileorigin, filechange) print("プログラム終了")
10行目:インデックスは0から始まるので1を足しています。これでrabbit1.jpgから始める事ができます。
12行目:str(filecount)は数字を文字列に変換します。
これでフォルダ内のファイル名をすべて変更することが出来ました。
まとめ
いかがだったでしょうか。
今回は4つのファイルだけでしたが、100枚など多くなればプログラムでリネームした方が楽ですよね。
次回はGUIでファイル名を変えるプログラムにしたいと思います。
コメント