我有一个包含900000行的非常大的文本文件。我必须计算没有' year1995'和' year1996'在线。我做了如下:
fname = r"data.txt"
with open(fname,'r') as fi:
lines = fi.read().splitlines()
print len(lines)
test = [l for l in lines if 'year1995' or 'year1996' not in l]
print len(test)
但是我的代码没有产生预期的结果。
有什么想法吗?
答案 0 :(得分:1)
您所拥有的代码会将每一行放在test
中。这是因为第一个if
语句将始终评估为True
,因为非空字符串是真实的。在理解中更改测试:
[l for l in lines if not ('year1995' in l or 'year1996' in l)]
答案 1 :(得分:1)
创建一个列表扔掉它是没有意义的,只需使用sum:
with open(fname,'r') as fi:
print sum(not any(x in line for x in ('year1995','year1996' ) ) for line in fi)
也不需要 lines = fi.read().splitlines()
,只需遍历每行的文件对象。
答案 2 :(得分:0)
您需要将if
条件更改为:
if not 'year1995' in l or not 'year1996' in l
或
if not ('year1995' in l or 'year1996' in l)
注意:您需要在not
操作后添加条件!