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

如何用glob遍历TEST2多级子文件夹的txt文件并执行指定操作?

解决Python遍历嵌套子文件夹并过滤文本的问题

我来帮你搞定这个问题!你遇到的核心问题有几个:glob默认不会递归遍历所有层级的子文件夹,代码里还有个小变量名错误,另外输出文件的写入模式也需要调整避免内容被覆盖。

关键修复点

  • 递归遍历所有子文件夹:使用glob.glob时,开启recursive=True参数,同时将路径改为"C:/Users/JDoe/Downloads/TEST2/**/*.txt"——这里的**是通配符,用来匹配任意深度的子文件夹,不管嵌套多少层都能找到对应的txt文件。
  • 修正变量名错误:你代码里写的updatedDAT.write(line)是个笔误,应该改成updatedtxt.write(line),否则会直接抛出未定义变量的错误,导致代码运行失败。
  • 避免输出文件被覆盖:原来的open("...Output.txt", 'w')会在每次处理新文件时清空之前的内容,改成'a'(追加模式)就能把所有过滤后的内容累积到同一个输出文件里;如果想为每个输入文件生成单独的输出文件,也可以调整命名逻辑。

修正后的完整代码

import glob  # 别忘了导入glob模块!

with open('C:/Users/JDoe/Downloads/rows_to_del.txt', 'r', encoding="utf8") as f:
    delete_docs = [line.rstrip('\n') for line in f]
print(delete_docs)

def txtUpdater():
    # 递归匹配所有子文件夹下的txt文件
    path = "C:/Users/JDoe/Downloads/TEST2/**/*.txt"
    files = glob.glob(path, recursive=True)
    # 用追加模式打开输出文件,避免覆盖已有内容
    with open("C:/Users/JDoe/Downloads/Output/Output.txt", 'a', encoding="utf8") as updatedtxt:
        for name in files:
            with open(name, 'r', encoding="utf8") as originaltxt:
                for line in originaltxt:
                    # 检查当前行是否不包含任何要删除的内容
                    if not any(delete_doc in line for delete_doc in delete_docs):
                        updatedtxt.write(line)

# 调用函数执行操作
txtUpdater()

额外优化方案(生成单独输出文件)

如果你希望每个输入txt文件对应一个单独的过滤后文件(比如在Output文件夹下生成和原文件同名的新文件),可以用下面的代码:

import glob
import os

with open('C:/Users/JDoe/Downloads/rows_to_del.txt', 'r', encoding="utf8") as f:
    delete_docs = [line.rstrip('\n') for line in f]
print(delete_docs)

def txtUpdater():
    path = "C:/Users/JDoe/Downloads/TEST2/**/*.txt"
    files = glob.glob(path, recursive=True)
    output_dir = "C:/Users/JDoe/Downloads/Output/"
    # 自动创建输出文件夹(如果不存在)
    os.makedirs(output_dir, exist_ok=True)
    
    for name in files:
        # 获取原文件的文件名,用来命名输出文件
        filename = os.path.basename(name)
        output_path = os.path.join(output_dir, filename)
        with open(name, 'r', encoding="utf8") as originaltxt, open(output_path, 'w', encoding="utf8") as updatedtxt:
            for line in originaltxt:
                if not any(delete_doc in line for delete_doc in delete_docs):
                    updatedtxt.write(line)

txtUpdater()

这个版本会自动处理输出文件夹的创建,每个原文件都会生成对应的过滤后文件,不会互相覆盖。

内容的提问来源于stack exchange,提问作者sherrific

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:19:30