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