写真の移動をPythonで自動化する

この記事は約4分で読めます。

写真の選別

デジタル一眼カメラで撮影した写真をjpegとlawで同時保存した際、選別はどうやっていますか?

今まではjpegで確認して、イマイチな写真はエクスプローラーでjpegとlawを選択して削除していましたが、この方法だとなかなか時間がかかります。

そこで、まず始めにエクスプローラーで画像を種類ごとに並べかえて、jpegが連続して並ぶようにしてからwindows純正のフォトアプリで開き、いらない写真があればその場でDeleteキーで削除するようにしました。この方法でかなり効率は上がりましたが、新たにどのようにしてjpegで消した画像のlawを消すか、という問題が出てきます。

これを解決したいというのが今回の主題です。

具体的に何をするのか?

要するに以下のようなことがしたいわけですね。

フォルダ名:旅行

hokkaido.JPG
hokkaido.NEF
aomori.JPG
aomori.NEF
akita.JPG
akita.NEF
yamagata.JPG
yamagata.NEF

という画像があって、aomori.JPGとyamagata.JPGという画像を削除して(ごみ箱に移動して)、

フォルダ名:旅行

hokkaido.JPG
hokkaido.NEF
aomori.NEF
akita.JPG
akita.NEF
yamagata.NEF

この状況になったときに、aomori.NEFとyamagata.NEFを”delete”というフォルダにまとめてほしい。

フォルダ名:旅行

hokkaido.JPG
hokkaido.NEF
akita.JPG
akita.NEF

フォルダ名:delete

aomori.NEF
yamagata.NEF

ただし階層は

旅行
 hokkaido.JPG
 hokkaido.NEF
 akita.JPG
 akita.NEF
 delete
  aomori.NEF
  yamagata.NEF

ということです。

Pythonで移動させる

数百、数千枚ともなるとめんどくさいのでPythonにやらせます。

import os
import shutil

# フォルダの絶対パスを設定
folder_path = r"この中に絶対パスを書く"
delete_folder = os.path.join(folder_path, "delete")

# deleteフォルダがない場合は作成
if not os.path.exists(delete_folder):
    os.makedirs(delete_folder)

# .JPGファイル名を取得
jpg_files = {os.path.splitext(f)[0] for f in os.listdir(folder_path) if f.lower().endswith(".jpg")}

# .NEFファイルの処理
for file in os.listdir(folder_path):
    if file.lower().endswith(".nef"):
        file_name = os.path.splitext(file)[0]
        if file_name not in jpg_files:
            source_path = os.path.join(folder_path, file)
            destination_path = os.path.join(delete_folder, file)
            
            # 移動処理を実行
            shutil.move(source_path, destination_path)
            print(f"Moved: {file} → {destination_path}")

print("処理が完了しました。")

5行目、folder_path = r”この中に絶対パスを書く”に指示通り絶対パスを書いてください。
下の画像を例にとると、folder_path = r”C:\Users\**黒塗り部分**\Pictures\旅行” とします。

絶対パスの取得は、取得したいフォルダの画像内の赤く囲われた部分で左クリックすると表示され、

個人情報のため、黒塗り

その状態でCtrl+Cを押すことで絶対パスをクリップボードにコピーできます。

なお、\の代わりに¥が区切りとして表示される場合がありますが、ペーストした場所によって表示がかわります。VScode上では\になります。ペーストではなく手動でVScodeに打つときは\にしてください。

いよいよ実行してみましょう。VScodeが簡単に実行できるのでお勧めです。

ターミナルには移動したファイル名が表示され、最後に処理が完了しました。と表示されます。

その後、当該フォルダを確認すると、残した.JPGと同じ名前の.NEFファイルのみが存在し、それ以外の.NEFファイルはdeleteフォルダの中にまとめられています。

Comments

タイトルとURLをコピーしました