実現したいこと
大量に撮影された写真を、撮影場所ごとにフォルダを作成し、
そのフォルダに写真ファイルを振り分けしたいのです。
・入ってる写真のEXIF情報から撮影場所を認識
・「東京都品川区大崎」のように町名までを抽出
・抽出した町名をフォルダ名にし フォルダを作成
・同じ場所で撮影されている写真は、作成されたフォルダへ移動
前提
・写真の入っているフォルダ名:「photo」
・jpgファイルが大量に入っている
・ファイル名:「IMG_0001」から下4桁の数字が増える
指定のフォルダに入れておけば、大量に撮影された写真を自動で整理・振り分けされるプログラムを作りたいです。
発生している問題・エラーメッセージ
エラーメッセージ
new_folder_path = os.path.join(folder_path, folder_name)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'folder_name' is not defined. Did you mean: 'folder_path'?
os.makedirs(new_folder_path, exist_ok=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'new_folder_path' is not defined. Did you mean: 'folder_path'?
new_photo_path = os.path.join(new_folder_path, photo_file)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'new_folder_path' is not defined. Did you mean: 'folder_path'?
shutil.move(photo_path, new_photo_path)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'photo_path' is not defined
該当のソースコード
python
1import os 2import piexif 3from geopy.geocoders import Nominatim 4import shutil 5 6指定されたフォルダ内の全ての写真ファイルを取得する 7folder_path = "C:\\Users\\xxxx\\Desktop\\photo" 8photo_files = [f for f in os.listdir(folder_path) if f.endswith('.jpg') or f.endswith('.jpeg')] 9 10各写真ファイルに含まれる位置情報(EXIF情報)を取得し、緯度経度を取得する 11geolocator = Nominatim(user_agent="my-app") 12for photo_file in photo_files: 13 photo_path = os.path.join(folder_path, photo_file) 14 exif_dict = piexif.load(photo_path) 15 if 'GPS' in exif_dict: 16 gps_dict = piexif.GPSIFD(exif_dict['GPS']) 17 if all(val != 0 for val in gps_dict.values()): 18 lat = gps_dict[piexif.GPSIFD.GPSLatitude] 19 lat_ref = gps_dict[piexif.GPSIFD.GPSLatitudeRef] 20 lon = gps_dict[piexif.GPSIFD.GPSLongitude] 21 lon_ref = gps_dict[piexif.GPSIFD.GPSLongitudeRef] 22 lat_dec = (lat[0][0]/lat[0][1]) + (lat[1][0]/lat[1][1])/60 + (lat[2][0]/lat[2][1])/3600 23 if lat_ref.decode('utf-8') == 'S': 24 lat_dec *= -1 25 lon_dec = (lon[0][0]/lon[0][1]) + (lon[1][0]/lon[1][1])/60 + (lon[2][0]/lon[2][1])/3600 26 if lon_ref.decode('utf-8') == 'W': 27 lon_dec *= -1 28 location = geolocator.reverse(f"{lat_dec}, {lon_dec}") 29 folder_name = location.address.split(',')[0] 30 else: 31 folder_name = 'No location info' 32 else: 33 folder_name = 'No location info' 34 35各写真ファイルを、撮影場所に応じたフォルダに移動する 36new_folder_path = os.path.join(folder_path, folder_name) 37os.makedirs(new_folder_path, exist_ok=True) 38new_photo_path = os.path.join(new_folder_path, photo_file) 39shutil.move(photo_path, new_photo_path)
言語名:python
試したこと
ChatGPTに作ってもらったり、修正してもらったり
Web検索してやってみましたが、写真が整理されませんでした。
フォルダの作成もされませんし、コード実行後と実行前で変化がありません。
かれこれ、2週間が経ちます。限界だと思い質問させていただくことにしました。
補足情報(FW/ツールのバージョンなど)
OS:Win10
python:3.11.2
お力添えよろしくお願いします。
あなたの回答
tips
プレビュー