機械学習や画像認識をしていると特に、大量のファイルを扱わなければいけない時に直面すると思います。そのような時、ファイル名を連番にしておくと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

