Python脚本报错:如何按文件名前7位提取并移动PDF文件?
问题解决与修正脚本
错误原因分析
- 你把
duplicateFiles定义成了集合(set),集合没有append()方法,这就是报错的直接原因。 - 逻辑走偏:你要的是按文件名前7位相同分组,不是比较文件内容,没必要用
filecmp.cmp。 - 没遍历子文件夹:当前代码只读取了
folder根目录的PDF,没处理里面的子文件夹。 - 移动文件的代码完全错误,用
open无法实现移动,得用shutil模块。
修正后的完整脚本
import os from pathlib import Path import shutil # 配置路径 DATA_DIR = Path("folder") OUTPUT_DIR = Path("Duplicate Folder") # 创建输出文件夹(如果不存在) OUTPUT_DIR.mkdir(exist_ok=True) # 递归遍历所有子文件夹,收集所有PDF文件 pdf_files = list(DATA_DIR.rglob("*.pdf")) # rglob递归匹配子文件夹 # 按文件名前7位分组 file_groups = {} for pdf in pdf_files: # 取文件名前7位作为分组键(对应需求里的前7位匹配) key = pdf.name[:7] if key not in file_groups: file_groups[key] = [] file_groups[key].append(pdf) # 筛选出有多个文件的分组,移动到目标文件夹 for key, files in file_groups.items(): if len(files) >= 2: for file in files: dest_path = OUTPUT_DIR / file.name shutil.move(str(file), str(dest_path)) print(f"已移动: {file.name} -> {dest_path}")
关键说明
rglob("*.pdf"):递归遍历所有子文件夹里的PDF文件,满足处理多子文件夹的需求。- 用字典
file_groups分组:键是文件名前7位,值是对应PDF文件的路径列表,精准实现按前7位归类。 shutil.move():专门用于文件移动操作,比手动读写文件更稳定可靠。mkdir(exist_ok=True):自动创建输出文件夹,不存在就新建,避免路径不存在的报错。
内容的提问来源于stack exchange,提问作者userXM
相关产品推荐
相关产品推荐

