Python ファルダ内のファイルを一括処理
はじめに
一つのファイルに対して行う処理のコードは書けたけど、この処理をある特定のファルダ内のファイルすべてに対して行いたいというときに自分がよく使う方法をまとめた。
一括処理
今回は簡単な画像処理を用いた例を書く。
import cv2 import pathlib input_dir = './dir' # 保存するファルダ output_dir = './dir2' # フォルダ内に保存されているファイル一覧 image_list = list(pathlib.Path(input_dir).glob('**/*.png')) for i in range(len(image_list)): # 画像一枚をグレースケールで読み込み img = cv2.imread(str(image_list[i]), cv2.IMREAD_GRAYSCALE) # (100,100)にリサイズ img_resize = cv2.resize(img, (100,100)) # 保存先 output_path = output_dir + '/' + image_list[i].name # 画像保存 cv2.imwrite(output_path, img_resize)
以下でinput_dir内の「.png」が使用されるファイルパスのみ取得。
image_list = list(pathlib.Path(input_dir).glob('**/*.png'))
保存するファイル名は読み込んだファイル名と同一にしたいのでimage_list[i].nameとする。拡張子なしのものが欲しいときはimage_list[i].stemとする。
image_list[0]
dir/image0.png
image_list[0].name
image0.png
image_list[0].stem
image0
おわりに
pathlibを用いてフォルダ内のファイルを一括処理する方法を記載した。pathlibは慣れればとても使いやすいものだと思う。