需要了解这个python错误

时间:2016-04-02 06:42:52

标签: python if-statement text

我实际上正在使用以下python代码处理文本日志文件。即使在mline达到EOF之后,这也会持续运行。

myfile = open("560A_HL_Japan_02_04_2016.txt", 'r')
mod_myfile = open("560A_HL_Japan_02_04_2016_modified.txt", "wb")
mfl = myfile.readlines()
mstring=''
for mline in mfl:
    mli = mline.split()
    for l in range(len(mli)):
        if l >= 2:                      #second object
            mstring += mli[l]+' '
    mstring += '\n'
    mod_myfile.write(mstring)
mod_myfile.close()

如果我使用以下代码稍作修改。它执行没有任何问题

myfile = open("560A_HL_Japan_02_04_2016.txt", 'r')
mod_myfile = open("560A_HL_Japan_02_04_2016_modified.txt", "wb")
mfl = myfile.readlines()
for mline in mfl:
    mli = mline.split()
    for l in range(len(mli)):
        if l == 2:                      #second object
            mstring = mli[l]+' '
        elif l > 2:
            mstring += mli[l]+' '
    mstring += '\n'
    mod_myfile.write(mstring)
 mod_myfile.close()

1 个答案:

答案 0 :(得分:2)

在第一个示例中,您将mstring初始化为循环外的空字符串:

mstring = ''

然后在循环中继续添加mstring

mstring += mli[l]+' '

mstring永远不会重新初始化,因此它会越来越大,因此代码执行的时间会越来越长。

在第二个示例中,mstring每次l等于2时都会重置:

if l == 2:                      #second object
    mstring = mli[l]+' '

由于mstring会不时重置,因此第二个示例的效果会更好。

其他一些观察结果:

使用+ =添加字符串并不能保证在所有Python版本中都能提供最佳性能。考虑建立一个列表并在完成后调用' .join()。

不要将l用作变量名称,在某些字体中看起来像1。