一、问题场景:杂乱的视频文件名
在日常工作和学习中,我们经常会遇到这样的文件命名情况:
[1]基础教程.mp4
[23]进阶技巧.mp4
[156]项目实战.mp4
这种包含数字编号的命名方式虽然直观,但存在两个明显问题:
- 数字位数不一致,排序时会出现顺序错乱
- 需要修改文件名但必须保留原始文件
本文将介绍如何通过Python脚本批量复制并规范命名视频文件,实现:
✅ 自动补齐4位数字编号
✅ 保留原始文件不修改
✅ 智能识别有效文件
✅ 完整复制文件属性
二、完整解决方案
import os
import re
import shutil
def rename_and_copy_mp4_files(source_dir, target_dir):
"""智能重命名并复制视频文件
Args:
source_dir (str): 源目录路径
target_dir (str): 目标目录路径
"""
# 创建目标目录(自动处理已存在情况)
os.makedirs(target_dir, exist_ok=True)
# 遍历源目录所有文件
for filename in os.listdir(source_dir):
# 使用正则表达式解析文件名
pattern_match = re.match(r'\[(\d+)\](.+)\.(mp4|avi|mov)$', filename, re.IGNORECASE)
if pattern_match:
# 提取文件名组件
file_number = pattern_match.group(1)
file_content = pattern_match.group(2).strip()
file_ext = pattern_match.group(3).lower()
# 格式化数字编号(4位补零)
formatted_number = file_number.zfill(4)
# 构建新文件名
new_filename = f"{formatted_number}_{file_content}.{file_ext}"
# 构建完整路径
src_path = os.path.join(source_dir, filename)
dst_path = os.path.join(target_dir, new_filename)
# 执行带元数据的复制操作
shutil.copy2(src_path, dst_path)
print(f"成功处理:{filename} → {new_filename}")
else:
print(f"跳过非标准文件:{filename}")
if __name__ == "__main__":
# 配置路径(根据实际情况修改)
SOURCE_DIR = r"E:\video_source"
TARGET_DIR = r"E:\video_organized"
rename_and_copy_mp4_files(SOURCE_DIR, TARGET_DIR)
三、关键技术解析
1. 智能路径处理
os.makedirs(target_dir, exist_ok=True)
• exist_ok=True
参数确保:
• 目标目录不存在时自动创建
• 目录已存在时不报错
• 自动处理多级目录创建
2. 精准文件名匹配
r'\[(\d+)\](.+)\.(mp4|avi|mov)$'
正则表达式分解:
• \[(\d+)\]
捕获方括号内的数字
• (.+)
捕获任意长度内容(至少1个字符)
• (mp4|avi|mov)$
支持多种视频格式
• re.IGNORECASE
忽略大小写
支持匹配的格式:
• [123] 教程.mp4
• [45]advanced.MOV
• [6]测试文件.AVI
3. 数字格式化
file_number.zfill(4)
转换示例:
• “1” → “0001”
• “23” → “0023”
• “156” → “0156”
4. 安全文件复制
shutil.copy2(src, dst)
与普通复制的区别:
• 保留原始创建时间
• 保留最后修改时间
• 保留文件权限设置
• 保留其他元数据
四、使用指南
准备步骤
- 安装Python 3.6+环境
- 创建脚本文件
video_organizer.py
- 准备测试目录(建议先进行测试)
配置示例
# Windows系统示例
SOURCE_DIR = r"E:\training_videos"
TARGET_DIR = r"D:\sorted_videos"
# macOS/Linux示例
# SOURCE_DIR = "/Users/username/Videos/source"
# TARGET_DIR = "/Volumes/external_drive/sorted_videos"
执行效果
原始文件 | 生成文件 |
---|---|
[1]介绍.mp4 | 0001_介绍.mp4 |
[23]基础课.avi | 0023_基础课.avi |
[156]项目实战.mov | 0156_项目实战.mov |
五、高级扩展建议
1. 添加进度提示
# 在循环开始前添加
total_files = len([f for f in os.listdir(source_dir) if f.endswith(('.mp4', '.avi', '.mov'))])
processed = 0
# 在处理成功时添加
processed += 1
print(f"进度:{processed}/{total_files} ({processed/total_files:.1%})")
2. 防覆盖机制
if os.path.exists(dst_path):
base, ext = os.path.splitext(new_filename)
counter = 1
while os.path.exists(dst_path):
new_filename = f"{base}_{counter}{ext}"
dst_path = os.path.join(target_dir, new_filename)
counter += 1
3. 多线程加速
from concurrent.futures import ThreadPoolExecutor
def process_file(filename):
# 原处理逻辑
with ThreadPoolExecutor(max_workers=4) as executor:
executor.map(process_file, os.listdir(source_dir))
六、注意事项
-
路径格式验证
• Windows路径使用反斜杠r"E:\path"
• 其他系统使用正斜杠"/path/to/files"
-
权限问题
• 确保对源目录有读取权限
• 确保对目标目录有写入权限 -
特殊字符处理
• 自动跳过包含非法字符的文件
• 可添加字符过滤逻辑:file_content = re.sub(r'[<>:"/\\|?*]', '', file_content)
-
性能优化
• 万级以上文件建议添加:
◦ 进度条显示
◦ 错误日志记录
◦ 断点续传功能
七、总结
通过这个Python脚本,我们实现了:
• 🚀 批量处理视频文件
• 🔢 智能规范编号格式
• 💾 安全保留原始文件
• ⚡ 快速部署使用
扩展应用场景:
• 整理教学视频库
• 规范监控录像存档
• 管理影视素材资源
• 自动化测试视频处理
TIP:建议将此脚本与定时任务结合,打造自动化文件管理系统。欢迎在评论区分享你的使用经验或提出改进建议!
# 后续更新计划
# 1. 添加图形界面
# 2. 支持配置文件
# 3. 增加邮件通知功能
# 关注获取更新通知!