如何使用Python批量整理文件?这篇博客帮你搞定

如何使用Python批量整理文件?这篇博客帮你搞定 为什么你需要批量整理文件下载文件夹乱成一团、桌面堆满截图、照片按日期散落各处……这些场景你一定不陌生。手动整理耗时耗力而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_pathos.path.join(target_dir,filename)ifnotos.path.isfile(file_path):continueextos.path.splitext(filename)[1].lower()movedFalseforfolder,extensionsintype_map.items():ifextinextensions:folder_pathos.path.join(target_dir,folder)os.makedirs(folder_path,exist_okTrue)shutil.move(file_path,os.path.join(folder_path,filename))movedTruebreakifnotmoved:other_pathos.path.join(target_dir,其他)os.makedirs(other_path,exist_okTrue)shutil.move(file_path,os.path.join(other_path,filename))# 使用sort_by_extension(rC:\Users\你的用户名\Downloads)运行前注意 把路径换成你自己的文件夹路径。建议先在测试文件夹上跑一遍。场景二按日期整理照片/文件照片按拍摄日期分类是另一个高频需求。importosimportshutilfromdatetimeimportdatetimedefsort_by_date(target_dir,date_fromexif):forfilenameinos.listdir(target_dir):file_pathos.path.join(target_dir,filename)ifnotos.path.isfile(file_path):continue# 方式1从文件名提取日期如 2026-06-20_photo.jpgtry:date_strfilename.split(_)[0]# 2026-06-20date_objdatetime.strptime(date_str,%Y-%m-%d)except:# 方式2从文件修改时间获取date_objdatetime.fromtimestamp(os.path.getmtime(file_path))folder_namedate_obj.strftime(%Y-%m)# 2026-06folder_pathos.path.join(target_dir,folder_name)os.makedirs(folder_path,exist_okTrue)shutil.move(file_path,os.path.join(folder_path,filename))# 使用sort_by_date(rD:\照片)提示 如果你的照片有EXIF信息拍摄日期可以用piexif或Pillow库读取真实拍摄时间比文件名更准确。场景三批量重命名文件名乱七八糟统一格式一键搞定。importosdefbatch_rename(target_dir,prefix文件,start1):files[fforfinos.listdir(target_dir)ifos.path.isfile(os.path.join(target_dir,f))]fori,filenameinenumerate(files,startstart):extos.path.splitext(filename)[1]new_namef{prefix}_{i:03d}{ext}# 文件_001.jpgold_pathos.path.join(target_dir,filename)new_pathos.path.join(target_dir,new_name)os.rename(old_path,new_path)print(f{filename}→{new_name})# 使用batch_rename(rC:\Users\你的用户名\Desktop\截图,prefix截图,start1)输出示例screenshot_abc.png → 截图_001.png 屏幕快照 2026-06-20.png → 截图_002.png几个实用建议建议说明先备份再操作批量操作不可逆建议先复制一份原文件用os.makedirs(exist_okTrue)避免文件夹已存在时报错shutil.move比os.rename更安全跨磁盘移动时os.rename会失败加try/except包装实际文件中可能有特殊字符或权限问题最后批量整理文件的核心逻辑就三步遍历文件夹中的文件判断分类规则类型/日期/名称移动或重命名到目标位置上面的代码可以直接复制使用根据自己的需求改一下路径和规则就行。如果你的需求更复杂比如按文件大小分类、重复文件检测可以在评论区说我帮你写。