Після, наприклад, перекодування відео у вас часто є набір файлів у тому ж каталозі з назвами, наприклад, MyMovie.avi та MyMovie.avi.mkv.
Наступний скрипт відсортує всі файли з однаковим префіксом (MyMovie) у каталог, названий як префікс. Це дозволяє легко сортувати та порівнювати ці файли.
Інші файли не будуть зачеплені. Операція виконується нерекурсивно, і жодні файли не будуть перезаписані.
Зверніть увагу, що список розширень файлів жорстко закодований, а подвійні розширення, такі як .avi.mkv, також розглядаються як стандартні розширення. Перевірка розширення виконується за допомогою .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="шлях до каталогу")
args = parser.parse_args()
directory = args.directory
extensions = [
".avi",
".mkv",
".mp4"
]
# Додаємо розширення на кшталт ".avi.mp4" на початку
# щоб перевіряти їх першими
extensions = [e1 + e2 for e1 in extensions for e2 in extensions] + extensions
files_by_prefix = defaultdict(list)
for file in os.listdir(directory):
# Відокремлюємо розширення
for potential_extension in extensions:
if file.endswith(potential_extension):
file_prefix = file[:-len(potential_extension)]
files_by_prefix[file_prefix].append(file)
# Ігноруємо префікси лише з одним файлом
files_by_prefix = {k: v for k, v in files_by_prefix.items() if len(v) > 1}
# Створюємо каталог для кожного префікса та переміщуємо туди всі файли
for prefix, files in files_by_prefix.items():
os.makedirs(os.path.join(directory, prefix), exist_ok=True)
# Переміщуємо файл, якщо призначення не існує
for file in files:
print(f"{file} -> {prefix}/{file}")
os.rename(os.path.join(directory, file), os.path.join(directory, prefix, file))
Дивіться схожі статті за категоріями:
Python
Якщо ця стаття допомогла вам, будь ласка, подумайте про те, щоб купити мені каву або зробити пожертву через PayPal на підтримку досліджень та публікації нових статей на TechOverflow