質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

563閲覧

写真の自動整理プログラムを作りたい

kwg

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/02/21 06:34

編集2023/02/21 06:53

実現したいこと

大量に撮影された写真を、撮影場所ごとにフォルダを作成し、
そのフォルダに写真ファイルを振り分けしたいのです。

・入ってる写真の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

お力添えよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2023/02/21 06:43 編集

このままではコードがまったく読めないので、</>ボタンで出てくる枠の中に言語の種別を指定してコードを入れてください。そうすると、インデントが保存され読めるようになります。 質問は編集できます。 エラーの部分を見ると、pythonのプロンプトから実行しているように見えますが、プログラムはどのように実行していますか? このプログラムはどのように作っていますか? 段階を追うのではなく、いきなり完成形を作っているのですか?
kwg

2023/02/21 06:58

コメントありがとうございます。ご指摘のとおりコードを枠内に納めました。実行方法については、コマンドプロンプトで「python」入力して、そこにコードをコピペしています。このコードはAIが作ったものです。ファイルパスなどは変更しましたが、エラーが出てまったく整理ができません。
TakaiY

2023/02/21 07:19

> 「python」入力して、そこにコードをコピペしています。 この方法ではうまく動かすことは難しいです。 プログラムそのものも動くようにするにはだいぶ修正が必要です。 プログラムを作っている目的は何ですか? pythonのプログラムが作れるようになることですか? 写真ファイルが整理できればいいのですか?
m.ts10806

2023/02/21 07:26 編集

>ChatGPTに作ってもらったり、修正してもらったり 今度は赤の他人に直してもらいたい(自分でプログラミングできる必要はない)というように見えますが如何でしょうか。ただ、その2週間で基礎からきちんとやっていれば、ある程度自分でも直せるようになっていたのではと思います。 要件を満たすツールを探すか、お金を出して作ってもらった方が良いのではないでしょうか。 ChatGPTについては是非はありますが、自身で正否が判断できる前提で初めて活きてくるものなので、「何も知らずに読みも書きもできない人でもアプリが作れるツール」という認識は捨てるべきと思います。あくまで「参考」のみとすべき。ググって出てくる結果をどうするのか、と同じです。
kwg

2023/02/21 09:14

皆さんのご意見はごもっともだと思います。本業の合間、大量の写真に困っているメンバーの役に立てればと思って、やってみはしましたが、私の力不足でゴールにたどりつけませんでした。まるまる2週間の間、これだけに時間を費やせるならそうかもしれません。センスの要素もありますが...。これに関しては、どんな方法でも、写真ファイルが整理できれば、体力仕事で疲労困憊の後に、事務作業で困窮しているメンバーを助けたかっただけなのです。残念ですが、これ以上の時間が取れないので、別の事でメンバーの役に立とうと思います。
m.ts10806

2023/02/21 09:37

やはり「作る」ではなく「使えるものを探す」方ですね。
TakaiY

2023/02/21 10:39

とりかかったのに途中で諦めてしまうのは残念ですが、しかたないですね。 これをきっかけにプログラミングのスキルを身に付けて将来役に立てられるといいですね。
PondVillege

2023/02/21 12:16

36~39行目のインデントを下げるだけで動きそうな気はしますけどどうなんでしょう,対話モードで実行せず.pyファイルに書き込んでやってみてほしいですね.
TakaiY

2023/02/21 12:42

動きそうではありますけど、モジュールのインストールとかどうなっているかわからないし、位置情報とれるかもわからないし、たいへんそうですよ。
hoshi-takanori

2023/02/22 18:38

ちゃんとコード見てませんが、最終的に shutil.move してるってことは、移動先に同名のファイルがあると上書きされて、大事なファイルが消えちゃう可能性がありますね。 人間が手作業でやる場合、そういうチェックもしながら作業すると思いますが、だから時間がかかるとも言えます。逆に、自動化する場合は、そういうチェックを明示的に書かないと(書いてもバグってる可能性もあるし)事故の元なので、ご注意ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問