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

遍历USEcorpus子目录下所有.txt文件的代码异常排查

解决遍历子目录下所有.txt文件的问题

问题诊断

你的代码只处理第一个子目录和文件,大概率是以下原因:

  • os.listdir(data_dir)会返回该路径下所有条目(包括文件和目录),如果USEcorpus下存在非目录文件,执行os.listdir(subdir)时会抛出NotADirectoryError,直接终止循环。
  • 没有过滤.txt文件,若子目录下存在非文本文件,open()可能抛出编码或格式错误,中断流程。
  • 变量名dir是Python内置函数名,虽不报错但易引发混淆。

修复方案

方案1:修复原有代码逻辑

添加目录判断和文件后缀过滤,确保只处理目标内容:

import os

# 定义根数据目录
data_dir = os.path.join("in", "USEcorpus")

# 遍历USEcorpus下的所有条目
for subdir_name in os.listdir(data_dir):
    subdir_path = os.path.join(data_dir, subdir_name)
    # 跳过非目录条目
    if not os.path.isdir(subdir_path):
        continue
    # 遍历子目录下的文件
    for filename in os.listdir(subdir_path):
        # 只处理.txt后缀的文件(兼容大小写)
        if not filename.lower().endswith(".txt"):
            continue
        filepath = os.path.join(subdir_path, filename)
        # 读取并处理文本
        with open(filepath, "r", encoding="latin-1") as file:
            text = file.read()
            # 这里添加你的NLP处理逻辑,比如打印文件路径验证遍历效果
            print(f"已读取文件: {filepath}")

方案2:使用os.walk递归遍历(推荐)

os.walk会自动递归遍历目录结构,更简洁可靠:

import os

data_dir = os.path.join("in", "USEcorpus")

# 遍历目录树:root=当前目录, dirs=子目录列表, files=当前目录下的文件列表
for root, _, files in os.walk(data_dir):
    for filename in files:
        if filename.lower().endswith(".txt"):
            filepath = os.path.join(root, filename)
            with open(filepath, "r", encoding="latin-1") as file:
                text = file.read()
                # 执行NLP处理
                print(f"已处理文件: {filepath}")

方案3:使用glob匹配目标文件

glob支持通配符匹配,直接获取所有目标文件路径,代码最简洁:

import glob
import os

# 匹配USEcorpus下所有子目录中的.txt文件(*匹配任意子目录)
txt_file_paths = glob.glob(os.path.join("in", "USEcorpus", "*", "*.txt"))

for filepath in txt_file_paths:
    with open(filepath, "r", encoding="latin-1") as file:
        text = file.read()
        # 执行NLP处理
        print(f"已处理文件: {filepath}")

关键说明

  • 使用filename.lower().endswith(".txt")可以兼容大小写不同的后缀(如.TXT)。
  • 若你的14个子目录下还有嵌套子目录,os.walk会自动遍历所有层级,而glob需要调整通配符为**/*.txt并设置recursive=True。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:15:42