【第12回PYTHON講座】ファイル名を変更するプログラムの作成①

PYTHON

今回は『ファイル名を変更するプログラム』を作ってみたいと思います。

C:\rabbitのフォルダにウサギの画像ファイルが4枚保存されています。しかし、ファイル名は統一されていないので、rabbit1.jpg~rabbit4.jpgと『rabbit 』+ 『番号』でファイル名を変更するプログラムを作成します。
 

では、始めてみましょう。

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でファイル名を変更します。第一引数に変更前のファイル名を、第二引数に変更後のファイル名を入力して下さい。

ファイル名を変更する関数:os.rename(元のファイル名、変えたいファイル名)

これを実行するとファイル名が変更されます。では、このプログラムを拡張していきましょう。

カスタマイズ:ファイルの存在を確認するプロセスを作る

先ほどのプログラムをもう一度実行させると、下記のエラーが表示されます。

FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。: 

これはファイル名が存在していない時に出るエラーで、プログラムが実行されません。

プログラムのコンパイル時にエラーを出すのではなく、プログラム内でファイルの存在を確認し、存在していなければ存在していないことをメッセージで出した方がきれいですよね。

下記のプログラムを加えます。

if (os.path.exists(fileorigin)):
    os.rename(fileorigin, filechange)
else:
    print(f'{fileorigin}が見つかりません')

1行目os.path.existsでファイルが存在しているかを確認します。ファイルが存在していればTrue、存在していなければFalseが戻り値になります。

os.path.exists(ファイル名)でファイルの有無を知る

ファイルが無ければ、『XXが見つかりません』とメッセージが出るので、使う側に状況を伝えるのに親切ですよね。

フォルダの全ファイル名の確認

上記のプログラムでは、既知のファイル名を変更するという事をしました。

これでは、フォルダ内にファイルが多数あれば、プログラムに一つ一つ名前と関数を加えていくのは無理があります。

そこで、プログラムで『フォルダ内のファイル名をすべて取得』していくようにします。

for count, filename in enumerate(os.listdir(filefolder)): 
    print(count, filename)

1行目:os.listdir(filefolder)はフォルダ内のファイルを全て取得しリスト化する関数です。そして、enumerateはリスト化した物に対してインデックスを加えます。countにはインデックス番号filenameにはファイル名が保存されます。

os.listdir(フォルダ名)でフォルダ内のファイル名を取得し、enumerateで取得したファイル名をインデックス化する

実行結果は下記になります。インデックスは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でファイル名を変えるプログラムにしたいと思います。

PYTHON
スポンサーリンク
シェアする
フォローする

コメント

タイトルとURLをコピーしました