我实际上正在使用以下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()

最佳答案

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

mstring = ''

然后在循环中继续添加到mstring

mstring += mli[l]+' '

但是mstring从未重新初始化,因此它会越来越大,因此代码执行将花费越来越长的时间。

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

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


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

其他一些观察:

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

不要使用l作为变量名,某些字体看起来像1。

10-04 20:24