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

Python中for循环内读取文本文件失败问题求助

解决glob遍历文件列表无法读取文件的问题

嘿,我来帮你排查这个问题~你说直接指定单个文件路径时能正常读取,但用glob获取文件列表循环读取就不行,咱们一步步来分析:

可能的原因&排查步骤

  1. 先确认路径是否正确
    你已经在循环里打印了fl,可以仔细看看输出的路径和你手动写的单个文件路径格式是否一致?比如有没有多余的转义字符,或者路径里的大小写问题(Windows下路径不区分大小写,但偶尔也会有特殊情况)。

  2. 是不是读取后没看到内容误以为没读取?
    如果你是在脚本里运行代码,单个文件时可能在交互环境里执行f.read()会直接输出内容,但循环里的f1.read()只是读取了内容却没有打印或保存,看起来好像没读取。可以试试在循环里把读取到的内容打印出来:

    f1 = open(fl,'r')
    content = f1.read()
    print(content)
    f1.close() # 记得关闭文件句柄
    
  3. 文件编码问题
    有些txt文件可能不是默认的UTF-8编码,比如GBK或者带BOM的UTF-8,这时候直接用open(fl,'r')会报错。可以试试指定编码参数:

    f1 = open(fl,'r', encoding='utf-8-sig') # 处理带BOM的UTF-8文件
    # 或者试试GBK编码
    # f1 = open(fl,'r', encoding='gbk')
    
  4. 文件权限或空文件
    虽然单个文件能读,但不排除列表里有特殊文件(比如空文件)或者权限异常的文件。这时候可以用异常捕获来定位问题:

推荐的改进代码(最佳实践)

我建议你用with语句来管理文件,它会自动关闭文件句柄,避免资源泄漏,同时加上异常捕获能快速定位错误:

import glob

fileList = glob.glob("E:\\Python\\nltk\\data\\training\\letter\\*.txt")
for fl in fileList:
    print(f"正在处理文件: {fl}")
    try:
        with open(fl, 'r', encoding='utf-8-sig') as f1:
            content = f1.read()
            print(f"文件内容长度: {len(content)}")
            # 这里可以添加你对文件内容的处理逻辑
    except Exception as e:
        print(f"读取文件 {fl} 出错: {str(e)}")

额外提示

  • 运行上面的代码后,你能看到每个文件的处理状态,如果有错误会直接显示错误信息,比如编码错误、文件不存在等,这样就能精准定位问题啦。
  • 如果你是在Python交互环境里测试,循环里的read()执行后,文件指针会移到文件末尾,再次调用read()会返回空字符串,这时候可以用f1.seek(0)把指针移回开头再读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:10:05