f.readlines()坑

遇到问题

方法一:

with open("E:\\eal.txt",'r', encoding='utf-8') as fll:
    nl1 = [line.split(',')[1] for line in fll.readlines() if line.split(',')[0] == '0']
    nl2 = [line.split(',')[1] for line in fll.readlines() if line.split(',')[0] == '1']
print(len(nl1),len(nl2))

39 0

      实践操作中 ,开始使用方法一的代码未报错,但是nl2语句未返回有效结果。 改用方法二测试,能返回正确结果。

方法二:

nl1 = []
nl2 = []
with open("E:\\eal.txt",'r', encoding='utf-8') as fll:
    for line in  fll.readlines():
        if line.split(',')[0] == '0':
            nl1.append(line.split(',')[1])
        if line.split(',')[0] == '1':
            nl2.append(line.split(',')[1])
print(len(nl1),len(nl2))
39 205

进行分析发现原因:readlines()是一次性工作,读入内存后迭代完成就没有了。 

解决方法:

方法一:给.readlines()赋值变量存储,再进行操作

with open("E:\\eal.txt",'r', encoding='utf-8') as fll:
    fl = fll.readlines()
    nl1 = [line.split(',')[1] for line in fl if line.split(',')[0] == '0']
    nl2 = [line.split(',')[1] for line in fl if line.split(',')[0] == '1']
print(len(nl1),len(nl2))

39 205

方法二:利用.seek(),将光标移至文件开头位置。

with open("E:\\eal.txt",'r', encoding='utf-8') as fll:
    nl1 = [line.split(',')[1] for line in fll.readlines() if line.split(',')[0] == '0']
    fll.seek(0)
    nl2 = [line.split(',')[1] for line in fll.readlines() if line.split(',')[0] == '1']
print(len(nl1),len(nl2))

39 205

好啦!问题解决了。学习基础知识也要注意细节哦!

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值