[Python] 96 再掲 Nikon画像ファイルの日付別取り込み

[M1 Mac, Big Sur 11.6.5, Python 3.10.0]

前のブログサイトからの引っ越しです。画像ファイルをSDカードから外部SSDへ日付振り分けしてコピーします。

Nikon Trasnferという配布アプリで日付振り分けができることを知らずにコードを書きました。今も愛用しています。

# coding: UTF-8

import shutil ,os ,glob
from PIL import Image, ExifTags
import collections

path_list = glob.glob('/NIKON D500 /DCIM/101ND500/*.JPG')

exif_datetime_list = []
for path in path_list: 
    img = Image.open(path)

    exif = { ExifTags.TAGS[k]: v for k, v in img._getexif().items() if k in ExifTags.TAGS }

    # print(exif)
    exif_datetime = [v for k, v in exif.items() if k == "DateTimeOriginal"]
    print(exif_datetime[0])

    exif_datetime_str = (exif_datetime[0].split(':')[0])[2:4] + exif_datetime[0].split(':')[1] + (exif_datetime[0].split(':')[2])[0:2]
    print(exif_datetime_str)
    exif_datetime_list.append(exif_datetime_str)

print(exif_datetime_list)

# 作成日の内訳を集計し作成日のリストを作成する
keys = collections.Counter(exif_datetime_list).keys()
print(keys)

# 作成日フォルダを作成する
for key in keys:
    try:
        os.mkdir('/photo/D500/' + str(key))
    except FileExistsError:
        pass

# 画像ファイルを各フォルダにコピーする
for path in path_list:
    
    # 画像ファイルを読み込む
    img = Image.open(path)

    exif = { ExifTags.TAGS[k]: v for k, v in img._getexif().items() if k in ExifTags.TAGS }

    exif_datetime = [v for k, v in exif.items() if k == "DateTimeOriginal"]
    
    exif_datetime_str = (exif_datetime[0].split(':')[0])[2:4] + exif_datetime[0].split(':')[1] + (exif_datetime[0].split(':')[2])[0:2]

    # ファイルパスを文字列に変換する
    path_str = str(path)

    # ファイル名を抽出する(スラッシュで分割した最後の文字列)
    filename = path_str.split('/')[-1]

    # RAWファイル名を生成する
    filename_raw = filename.split('.')[0] + '.NEF'

    # RAWファイルのコピー元を生成する
    filename_raw_src = '/NIKON D500 /DCIM/101ND500/' + str(filename_raw)
    # RAWファイルのコピー先を生成する
    filename_raw_dest = '/photo/D500/'+ str(exif_datetime_str) + '/' + str(filename_raw)

    print(f'RAWコピー元 {filename_raw_src}')
    print(f'RAWコピー先 {filename_raw_dest}\n')

    filename_jpeg_dest = '/photo/D500/'+ str(exif_datetime_str) + '/' + str(filename)

    print(f'JPEGコピー元 {path}')
    print(f'JPEGコピー先 {filename_jpeg_dest}\n')

    # JPGファイルをコピーする
    shutil.copy2(path,filename_jpeg_dest)

    # RAWファイルをコピーする
    try:
        shutil.copy2(filename_raw_src,filename_raw_dest)
    except FileNotFoundError :
        pass

# Macのデスクトップ通知
def main():
    os.system("osascript -e 'display notification \"Nikonファイルコピー\nコード実行完了\"'")

if __name__ == '__main__':
    main()

[C++] 34 FLTK : findコマンド生成アプリ/絶対パス

[M1 Mac, Big Sur 11.6.5, FLTK 1.3.8]

アプリ作成の仕込みとしてfindコマンドへの理解を深めています。

前回の記事で検索結果を絶対パスで出力する場合はディレクトリ指定の所をpwdに置き換えます。

cd /test && \
find `pwd` -type file -newerat '20220414 23:59' ! -newerat '20220415 23:59' ! -name "*DS_Store*" -and -name "*PkgInfo*" && \
find `pwd` -type file -newerat '20220414 23:59' ! -newerat '20220415 23:59' ! -name "*DS_Store*" -and -name "*PkgInfo*" | wc -l
--------------------------------------------------
出力例
--------------------------------------------------
/Python/test/PkgInfo
       1