遇到问题
方法一:
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
好啦!问题解决了。学习基础知识也要注意细节哦!