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

Python读取TXT文件后列表推导式返回空列表的问题排查

代码问题分析与解决

嘿,你这段代码确实有个容易忽略的小问题,导致返回了空列表,咱们拆解来看:

先看你写的代码:

base_txt = open(path, 'rU')
txt = base_txt.readlines()
txt = [x for x in base_txt if x.startswith('#')]
print txt
print len(txt)

核心问题出在文件指针的位置上:当你调用base_txt.readlines()的时候,已经把文件里的所有内容一次性读取出来了,这时候文件内部的指针会直接跳到文件末尾。之后你再去遍历base_txt这个文件对象时,已经没有任何内容可以读取了,所以列表推导式自然得到空列表。

另外还有两个小细节可以优化:

  • 'rU'这个模式在Python 3里已经被弃用了,建议换成'r'模式加上newline=''来兼容不同平台的换行符
  • 尽量用with语句打开文件,它会自动帮你关闭文件,避免忘记关闭导致的资源泄漏

给你两种修正后的写法:

写法一(推荐,更规范)

with open(path, 'r', newline='') as base_txt:
    # 直接遍历文件对象即可,无需先调用readlines()
    filtered_lines = [line for line in base_txt if line.startswith('#')]

print(filtered_lines)
print(len(filtered_lines))

写法二(保留你原有的读取逻辑)

如果你一定要先把所有内容读进列表,那可以基于已经读取的txt列表做推导:

base_txt = open(path, 'r')
txt = base_txt.readlines()
base_txt.close()  # 手动关闭文件
filtered_lines = [x for x in txt if x.startswith('#')]

print(filtered_lines)
print(len(filtered_lines))

简单来说,就是文件对象只能被完整读取一次,你先把内容读完了,后面再读就没东西啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:32:32