如何使用Python批量整理文件?这篇博客帮你搞定
2026/6/21 7:52:28 网站建设 项目流程

为什么你需要批量整理文件?

下载文件夹乱成一团、桌面堆满截图、照片按日期散落各处……这些场景你一定不陌生。

手动整理耗时耗力,而Python几行代码就能搞定。今天这篇博客,我会从最常见的3个场景出发,给你可直接运行的代码,拿来就能用。


场景一:按文件类型自动分类

这是最实用的场景。把"下载"文件夹里的文件,按后缀名自动分到对应文件夹。

importosimportshutildefsort_by_extension(target_dir):# 文件类型与文件夹的映射type_map={'图片':['.jpg','.jpeg','.png','.gif','.bmp','.svg'],'文档':['.pdf','.doc','.docx','.xls','.xlsx','.ppt','.pptx','.txt'],'视频':['.mp4','.avi','.mkv','.mov','.wmv'],'音频':['.mp3','.wav','.flac','.aac'],'压缩包':['.zip','.rar','.7z','.tar','.gz'],'代码':['.py','.js','.html','.css','.java','.c']}forfilenameinos.listdir(target_dir):file_path=os.path.join(target_dir,filename)ifnotos.path.isfile(file_path):continueext=os.path.splitext(filename)[1].lower()moved=Falseforfolder,extensionsintype_map.items():ifextinextensions:folder_path=os.path.join(target_dir,folder)os.makedirs(folder_path,exist_ok=True)shutil.move(file_path,os.path.join(folder_path,filename))moved=Truebreakifnotmoved:other_path=os.path.join(target_dir,'其他')os.makedirs(other_path,exist_ok=True)shutil.move(file_path,os.path.join(other_path,filename))# 使用sort_by_extension(r'C:\Users\你的用户名\Downloads')

运行前注意: 把路径换成你自己的文件夹路径。建议先在测试文件夹上跑一遍。


场景二:按日期整理照片/文件

照片按拍摄日期分类,是另一个高频需求。

importosimportshutilfromdatetimeimportdatetimedefsort_by_date(target_dir,date_from='exif'):forfilenameinos.listdir(target_dir):file_path=os.path.join(target_dir,filename)ifnotos.path.isfile(file_path):continue# 方式1:从文件名提取日期(如 2026-06-20_photo.jpg)try:date_str=filename.split('_')[0]# 2026-06-20date_obj=datetime.strptime(date_str,'%Y-%m-%d')except:# 方式2:从文件修改时间获取date_obj=datetime.fromtimestamp(os.path.getmtime(file_path))folder_name=date_obj.strftime('%Y-%m')# 2026-06folder_path=os.path.join(target_dir,folder_name)os.makedirs(folder_path,exist_ok=True)shutil.move(file_path,os.path.join(folder_path,filename))# 使用sort_by_date(r'D:\照片')

提示: 如果你的照片有EXIF信息(拍摄日期),可以用piexifPillow库读取真实拍摄时间,比文件名更准确。


场景三:批量重命名

文件名乱七八糟?统一格式一键搞定。

importosdefbatch_rename(target_dir,prefix='文件',start=1):files=[fforfinos.listdir(target_dir)ifos.path.isfile(os.path.join(target_dir,f))]fori,filenameinenumerate(files,start=start):ext=os.path.splitext(filename)[1]new_name=f"{prefix}_{i:03d}{ext}"# 文件_001.jpgold_path=os.path.join(target_dir,filename)new_path=os.path.join(target_dir,new_name)os.rename(old_path,new_path)print(f"{filename}{new_name}")# 使用batch_rename(r'C:\Users\你的用户名\Desktop\截图',prefix='截图',start=1)

输出示例:

screenshot_abc.png → 截图_001.png 屏幕快照 2026-06-20.png → 截图_002.png

几个实用建议

建议说明
先备份再操作批量操作不可逆,建议先复制一份原文件
os.makedirs(exist_ok=True)避免文件夹已存在时报错
shutil.moveos.rename更安全跨磁盘移动时os.rename会失败
try/except包装实际文件中可能有特殊字符或权限问题

最后

批量整理文件的核心逻辑就三步:

  1. 遍历文件夹中的文件
  2. 判断分类规则(类型/日期/名称)
  3. 移动或重命名到目标位置

上面的代码可以直接复制使用,根据自己的需求改一下路径和规则就行。

如果你的需求更复杂(比如按文件大小分类、重复文件检测),可以在评论区说,我帮你写。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询