Python中for循环内读取文本文件失败问题求助
解决glob遍历文件列表无法读取文件的问题
嘿,我来帮你排查这个问题~你说直接指定单个文件路径时能正常读取,但用glob获取文件列表循环读取就不行,咱们一步步来分析:
可能的原因&排查步骤
先确认路径是否正确
你已经在循环里打印了fl,可以仔细看看输出的路径和你手动写的单个文件路径格式是否一致?比如有没有多余的转义字符,或者路径里的大小写问题(Windows下路径不区分大小写,但偶尔也会有特殊情况)。是不是读取后没看到内容误以为没读取?
如果你是在脚本里运行代码,单个文件时可能在交互环境里执行f.read()会直接输出内容,但循环里的f1.read()只是读取了内容却没有打印或保存,看起来好像没读取。可以试试在循环里把读取到的内容打印出来:f1 = open(fl,'r') content = f1.read() print(content) f1.close() # 记得关闭文件句柄文件编码问题
有些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')文件权限或空文件
虽然单个文件能读,但不排除列表里有特殊文件(比如空文件)或者权限异常的文件。这时候可以用异常捕获来定位问题:
推荐的改进代码(最佳实践)
我建议你用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
相关产品推荐
相关产品推荐

