Python os.walk筛选指定文件时缩进错误排查及需求实现咨询
问题排查与代码修复
首先,先拆解你代码里的问题,再给你适配需求的正确实现:
直接引发错误的问题
- 变量未提前初始化:你在代码里用了
pdfs_in_dir.append(),但开头只定义了files_in_dir、others_in_dir、targets_in_dir,完全没声明pdfs_in_dir,这会触发NameError。至于你提到的缩进错误,大概率是粘贴代码时格式混乱导致的——Python对缩进极其严格,必须统一用空格或制表符,不能混合使用,你可以检查下循环内的代码缩进是否保持一致。 - 逻辑完全不符合需求:你的代码只是简单把pdf、含SS的文件、所有docx做了分类,但根本没处理你要排除的那几种带TT/tt后缀的docx,这和你实际想要的结果偏差很大。
适配你需求的修正代码
你的核心需求是:仅保留不带任何TT/tt组合后缀的docx文件,排除所有pdf和不符合要求的docx。直接看优化后的代码:
import os # 替换成你的目标文件夹路径 target_location = "你的文件夹路径" pdfs_in_dir = [] others_in_dir = [] targets_in_dir = [] # 遍历目录:root=当前根目录,dirs=子目录列表,files=当前目录下的文件列表 for root, dirs, files in os.walk(target_location): for filename in files: full_file_path = os.path.join(root, filename) # 先处理所有pdf文件 if filename.endswith(".pdf"): pdfs_in_dir.append(full_file_path) # 再处理docx文件,区分符合/不符合要求的 elif filename.endswith(".docx"): # 定义需要排除的所有docx后缀 exclude_patterns = ("_TT.docx", " TT.docx", "-TT.docx", " tt.docx", "_tt.docx") # 只有当文件名不以这些后缀结尾时,才加入目标列表 if not filename.endswith(exclude_patterns): targets_in_dir.append(full_file_path) else: # 不符合要求的docx归到其他列表 others_in_dir.append(full_file_path) # 剩下的所有非pdf非docx文件,统一归到其他列表 else: others_in_dir.append(full_file_path)
关键优化说明
- 用
str.endswith()传入元组的方式,一次性判断多个后缀,比写一堆or语句简洁高效得多 - 提前初始化了所有用到的列表,彻底避免变量未定义的错误
- 逻辑分层清晰:先筛选pdf,再处理docx(分符合/不符合),最后处理其他文件,不容易出错
- 如果之前确实是缩进错误,记得统一用4个空格缩进,别混合空格和制表符,Python对缩进格式的要求非常严格
内容的提问来源于stack exchange,提问作者Nimrod Ets
相关产品推荐
相关产品推荐

