如何使用 Python 将相同前缀但不同扩展名的文件分组到文件夹
例如,在重新编码视频后,你通常在同一目录中有一堆文件,例如 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="path to the directory")
args = parser.parse_args()
directory = args.directory
extensions = [
".avi",
".mkv",
".mp4"
]
# Add extensions such as ".avi.mp4" at the front
# 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):
# Split extension
for potential_extension in extensions:
if file.endswith(potential_extension):
file_prefix = file[:-len(potential_extension)]
files_by_prefix[file_prefix].append(file)
# Ignore prefixes with only one file
files_by_prefix = {k: v for k, v in files_by_prefix.items() if len(v) > 1}
# Create directory for every prefix and move all the files into it
for prefix, files in files_by_prefix.items():
os.makedirs(os.path.join(directory, prefix), exist_ok=True)
# Move file using if destination doesn't exist
for file in files:
print(f"{file} -> {prefix}/{file}")
os.rename(os.path.join(directory, file), os.path.join(directory, prefix, file))Check out similar posts by category:
Python
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow