需要了解这个python错误吗
实际上,我正在处理一个文本日志文件,其中包含以下python代码。即使在mline达到EOF后,也会继续运行需要了解这个python错误吗,python,if-statement,text,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()
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
就会重置:
if l == 2: #second object
mstring = mli[l]+' '
由于mstring
会不时重置,因此第二个示例的性能更好
还有几个其他的观察结果:
在所有版本的Python中,使用+=添加字符串并不能保证提供最佳性能。考虑建立一个列表并在完成时调用'`.Cou.()。
不要将
l
用作变量名,它在某些字体中看起来像1。您确定它会连续运行,而不是mstring
一直增长吗?如果第一个代码段在循环外初始化一次,但在第二个代码段中,每行初始化一次。能给我们一个小样本吗?顺便说一句,您可以将所有循环简化为data='\n'.join(''.join(line.split()[1:]),用于mfl.readlines()中的行
,并将其写入输出文件。你也应该考虑用语法来读/写你的文件。Op已经遇到了减速的问题,这意味着有大量的数据。CPython中的字符串有一个微优化,如果字符串只有一个引用,那么+=
将在适当的位置执行,而不是创建一个新字符串。使用join仍然更好,但是知道它很好。