You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python os.walk筛选指定文件时缩进错误排查及需求实现咨询

问题排查与代码修复

首先,先拆解你代码里的问题,再给你适配需求的正确实现:

直接引发错误的问题

  1. 变量未提前初始化:你在代码里用了pdfs_in_dir.append(),但开头只定义了files_in_dir、others_in_dir、targets_in_dir,完全没声明pdfs_in_dir,这会触发NameError。至于你提到的缩进错误,大概率是粘贴代码时格式混乱导致的——Python对缩进极其严格,必须统一用空格或制表符,不能混合使用,你可以检查下循环内的代码缩进是否保持一致。
  2. 逻辑完全不符合需求:你的代码只是简单把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 10:12:48