Created
March 23, 2020 05:38
-
-
Save Mossuru777/f0a0f164092aac29b8675e91ed401ac2 to your computer and use it in GitHub Desktop.
同じファイル名で拡張子が異なるファイルを抽出or削除
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
""" | |
ファイル名が同じJPEG/HEICファイルを抽出して別ディレクトリに移動する | |
https://qiita.com/shamoji/items/cd5736649b577a756926 をもとに作成しました | |
""" | |
from datetime import datetime, timedelta, timezone | |
import itertools | |
import os | |
from pathlib import Path | |
import shutil | |
# 探索するディレクトリ | |
find_dir = "./images" | |
def main(): | |
# Pathオブジェクトを生成 | |
current = Path(find_dir) | |
# ファイル一覧を保存するdict | |
files_dict = {} | |
# ファイル名をキーとして辞書型に格納する | |
for f in itertools.chain(current.glob("*.jpg"), current.glob("*.heic")): | |
# フルパスから拡張子を除いたファイル名を取得 | |
f_resolved = f.resolve() | |
file_path_without_ext = f_resolved.parent.joinpath(f_resolved.stem) | |
# これをキーとしてdictに追加していく | |
files_dict.setdefault(file_path_without_ext, []).append(f_resolved) | |
# 重複ファイル一覧を保存するlist | |
dup_files = [] | |
# dictに登録されたリストのサイズが2の場合、重複であるとして抽出する | |
dup_files = [v for k, v in files_dict.items() if len(v) == 2] | |
# 同ファイル名のJPEG/HEICファイルをdupsディレクトリに移動 | |
for pathes in dup_files: | |
for path in pathes: | |
if new_dir is None: | |
# dupsディレクトリが存在しない場合は作成する | |
new_dir = str(path.parent.joinpath("dups")) | |
os.makedirs(new_dir, exist_ok=True) | |
shutil.move(str(path), new_dir) | |
# 抽出・移動ファイル数出力 | |
dup_pairs = len(dup_files) | |
if dup_pairs > 0: | |
print(f"*** {new_dir} に {dup_pairs} の同ファイル名JPEG/HEICファイルペアを移動しました ***") | |
else: | |
print(f"*** {current} に対象の同ファイル名JPEG/HEICファイルペアは見つかりませんでした ***") | |
if __name__ == "__main__": | |
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
""" | |
dup_find.pyを実行してdupsディレクトリ以下の重複ファイルであるかを自分で確認した後、 | |
ファイル名が同じJPEG/HEICファイルのJPEGファイルを削除し、HEICファイルを1つ上位ディレクトリに移動する | |
https://qiita.com/shamoji/items/cd5736649b577a756926 をもとに作成しました | |
""" | |
from datetime import datetime, timedelta, timezone | |
import itertools | |
import os | |
from pathlib import Path | |
import shutil | |
# dup_find.pyで指定した探索時ディレクトリ (dupsは含まないでOK) | |
find_dir = "./images" | |
def main(): | |
# Pathオブジェクトを生成 | |
current = Path(find_dir).joinpath("dups") | |
if not current.exists(): | |
print(f"*** {current} が存在しません ***") | |
return | |
# ファイル一覧を保存するdict | |
files_dict = {} | |
# ファイル名をキーとして辞書型に格納する | |
for f in itertools.chain(current.glob("*.jpg"), current.glob("*.heic")): | |
# フルパスから拡張子を除いたファイル名を取得 | |
f_resolved = f.resolve() | |
file_path_without_ext = f_resolved.parent.joinpath(f_resolved.stem) | |
# これをキーとしてdictに追加していく | |
files_dict.setdefault(file_path_without_ext, []).append(f_resolved) | |
# 重複ファイル一覧を保存するlist | |
dup_files = [] | |
# dictに登録されたリストのサイズが2の場合、重複であるとして抽出する | |
dup_files = [v for k, v in files_dict.items() if len(v) == 2] | |
# JPEGファイルを削除し、HEICファイルを1つ上位のディレクトリに移動する | |
for pathes in dup_files: | |
for path in pathes: | |
if path.suffix == ".jpg": | |
os.remove(str(path)) | |
else: | |
original_dir = str(path.parent.parent) | |
shutil.move(str(path), original_dir) | |
# dupsディレクトリが空なら削除、それ以外は孤立ファイル数を出力 | |
after_proc_files = len(list(current.glob("*.*"))) | |
str_current = str(current) | |
if after_proc_files == 0: | |
os.rmdir(str_current) | |
else: | |
print(f"*** {str_current} に {after_proc_files} 個のファイルがあるため、削除しませんでした ***") | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment