有没有更好的方法来解析python中的文件?

时间:2016-02-15 20:58:51

标签: python

我正在寻找一种更好的方法来解析一个巨大的文件。 以下是该文件的示例。

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'

我正在运行两次循环。那么有更好的方法来解析文件吗?

2 个答案:

答案 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()

这样做的结果是分别获得发生abcxyz的行数。如果想要在找到单个匹配行后立即退出,那么包含break是合适的。