Skip to content

Instantly share code, notes, and snippets.

@YSRKEN
Created September 8, 2020 17:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save YSRKEN/15ff4bcbe8f690b1d29a9fac54c96a00 to your computer and use it in GitHub Desktop.
Save YSRKEN/15ff4bcbe8f690b1d29a9fac54c96a00 to your computer and use it in GitHub Desktop.
import os
import pathlib
import shutil
from typing import List, Tuple
def search_extra_file_list(image_directory_path_str: str, image_file_ext: str, raw_file_ext: str)\
-> Tuple[List[str], List[str]]:
# 画像ファイルのファイル名一覧、およびRAWファイルのファイル名一覧を取得する
image_directory_path = pathlib.Path(image_directory_path_str)
image_file_list = [x.name for x in image_directory_path.glob(f'*{image_file_ext}')]
raw_file_list = [x.name for x in image_directory_path.glob(f'*{raw_file_ext}')]
# それぞれのファイル名一覧から、それぞれ拡張子を取り除いたsetを用意し、突き合わせることで「余分なファイル」を洗い出す
image_file_name_set = {os.path.splitext(x)[0] for x in image_file_list}
raw_file_name_set = {os.path.splitext(x)[0] for x in raw_file_list}
image_file_name_set_2 = image_file_name_set - raw_file_name_set # 画像ファイルはあるがRAWファイルが無いもの
raw_file_name_set_2 = raw_file_name_set - image_file_name_set # RAWファイルはあるが画像ファイルが無いもの
# 出力用データを作成する
image_file_list_2 = [f'{x}{image_file_ext}' for x in image_file_name_set_2]
raw_file_list_2 = [f'{x}{raw_file_ext}' for x in raw_file_name_set_2]
return image_file_list_2, raw_file_list_2
if __name__ == '__main__':
# 処理を行うディレクトリのパス
IMAGE_DIRECTORY_PATH = 'H:/100OLYMP_M1mk2'
# 画像ファイル・RAWファイルの拡張子
IMAGE_FILE_EXT = '.jpg'
RAW_FILE_EXT = '.orf'
# 移動対象とするファイル一覧を作成する
extra_image_list, extra_raw_list = search_extra_file_list(IMAGE_DIRECTORY_PATH, IMAGE_FILE_EXT, RAW_FILE_EXT)
# ファイルを移動させる
image_directory = pathlib.Path(IMAGE_DIRECTORY_PATH)
output_path = image_directory / 'Extra_Files'
output_path.mkdir(exist_ok=True)
for file_name in extra_image_list + extra_raw_list:
shutil.move(str(image_directory / file_name), output_path)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment