サムネがコーヒーの記事は書きかけです。

pythonでファイル名の一括変更

機械学習や画像認識をしていると特に、大量のファイルを扱わなければいけない時に直面すると思います。そのような時、ファイル名を連番にしておくとforループで回して読み込むことがスムースにできるため、ファイル名の一括変更が役に立ちます。

今回使うモジュールは以下の2種類です。

import os 
import glob

初めに、大量のデータ(今回はJPEG画像を想定)が入っているフォルダ名をdata_rawとしておき、python実行ディレクトリをos.getcw()を用いて取得します。

current_directory = os.getcwd()
dir_rawdata = current_directory + '/data_raw'
print(sum(os.path.isfile(os.path.join(dir_rawdata, name)) for name in os.listdir(dir_rawdata)))

この操作により、dir_rawdataにファイルがある場所を代入することができました。

次に、フォルダ内にあるファイルをglobを用いて網羅的に取得し、リスト型の変数filesに代入します。

files = glob.glob(str(dir_rawdata)+"/*.jpg")

最後に、変数filesの中身をループを用いて取り出しながら、os.rename()によって名前を変更していきます。

i = 1
for name in files:
     new_name =  "{}.jpg".format(str(i))
     os.rename(name, new_name)
     print(name + "=>" + new_name)
     i += 1

全てをまとめると、以下のようになります。

このファイルを、rename.pyなどにして、一括変更対象フォルダの一階上のフォルダで実行すると連番画像を同ディレクトリに取得することができます。

def rename():
    import os 
    import glob
    current_directory = os.getcwd()
    dir_rawdata = current_directory + '/data_raw'
    print(sum(os.path.isfile(os.path.join(dir_rawdata, name)) for name in os.listdir(dir_rawdata)))
    files = glob.glob(str(dir_rawdata)+"/*.jpg")
    i = 1
    for name in files:
        new_name =  "{}.jpg".format(str(i))
        os.rename(name, new_name)
        print(name + "=>" + new_name)
        i += 1

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です