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