我正在寻找一种更好的方法来解析一个巨大的文件。 以下是该文件的示例。
sample.txt的
'abcdefghi'
'xyzwfg'
'lmnop'
其中我至少在文件中寻找'abc'和'xyz'
我能够找到它们,但我正在寻找更好的方法。 以下是我的代码
datafile = file('sample.txt')
abc = 0
xyz = 0
found - True
for line in datafile:
if 'abc' in line:
abc += 1
break
for line in datafile:
if 'xyz' in line:
xyz += 1
break
if (abc + xyz) >= 2:
print 'found'
else:
print 'fail'
我正在运行两次循环。那么有更好的方法来解析文件吗?
答案 0 :(得分:2)
如果您'xyz'
之前发生'abc'
,则您当前的代码会产生错误的结果。要在同一个循环中修复这个测试。
with open('sample.txt') as datafile:
abc_found = False
xyz_found = False
for line in datafile:
if 'abc' in line:
abc_found = True
if 'xyz' in line:
xyz_found = True
if abc_found and xyz_found:
break # stop looking if both found
答案 1 :(得分:0)
“更好”是主观的,并没有提供定义它的指标。但是,一个简单的优化如下:
for line in datafile:
if 'abc' in line:
abc += 1
if 'xyz' in line:
xyz += 1
如果实际问题是文件确实非常大,您希望一次只读一行:
f = open('myTextFile.txt', "r")
line = f.readline()
while line:
if 'abc' in line:
abc += 1
if 'xyz' in line:
xyz += 1
line = f.readline()
这样做的结果是分别获得发生abc
和xyz
的行数。如果想要在找到单个匹配行后立即退出,那么包含break
是合适的。