Po, například, překódování vašich videí, často máte spoustu souborů ve stejném adresáři pojmenovaných např. MyMovie.avi a MyMovie.avi.mkv.
Následující skript seřadí všechny soubory se stejným prefixem (MyMovie) do adresáře pojmenovaného jako prefix. Tohle umožňuje snadné třídění a porovnávání těchto souborů.
Ostatní soubory nebudou dotčeny. Operace je provedena nerekurzivně a žádné soubory nebudou přepsány.
Všimněte si, že seznam přípon souborů je hardcoded a dvojité přípony jako .avi.mkv jsou také považovány za standardní přípony. Kontrola přípony je provedena pomocí .endswith()
group_files_by_prefix.py
#!/usr/bin/env python3
import argparse
import os
from collections import defaultdict
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("directory", help="path to the directory")
args = parser.parse_args()
directory = args.directory
extensions = [
".avi",
".mkv",
".mp4"
]
# Přidat přípony jako ".avi.mp4" na začátek
# so we check them first
extensions = [e1 + e2 for e1 in extensions for e2 in extensions] + extensions
files_by_prefix = defaultdict(list)
for file in os.listdir(directory):
# Rozdělit příponu
for potential_extension in extensions:
if file.endswith(potential_extension):
file_prefix = file[:-len(potential_extension)]
files_by_prefix[file_prefix].append(file)
# Ignorovat prefixy s pouze jedním souborem
files_by_prefix = {k: v for k, v in files_by_prefix.items() if len(v) > 1}
# Vytvořit adresář pro každý prefix a přesunout do něj všechny soubory
for prefix, files in files_by_prefix.items():
os.makedirs(os.path.join(directory, prefix), exist_ok=True)
# Přesunout soubor pokud cíl neexistuje
for file in files:
print(f"{file} -> {prefix}/{file}")
os.rename(os.path.join(directory, file), os.path.join(directory, prefix, file))
Podívejte se na podobné články podle kategorie:
Python
Pokud vám tento článek pomohl, zvažte, zda mi nekoupíte kávu nebo nepřispějete přes PayPal na podporu výzkumu a publikování nových článků na TechOverflow