我实际上是在处理一个文本日志文件,使用下面的python代码。即使在多线到达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
永远不会重新初始化,所以它会越来越大,所以代码执行的时间会越来越长。你知道吗在第二个示例中,每当
l
等于2时,就会重置mstring
:因为
mstring
经常被重置,所以第二个示例的性能更好。你知道吗其他一些观察结果:
在所有Python版本中,使用+=添加字符串并不能保证提供最佳性能。考虑构建一个列表,并在完成后调用“”join()。你知道吗
不要使用
l
作为变量名,在某些字体中它看起来像1。你知道吗相关问题 更多 >
编程相关推荐