如何用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
相关产品推荐
相关产品推荐

