需要了解这个python错误吗

需要了解这个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()

实际上,我正在处理一个文本日志文件,其中包含以下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
永远不会重新初始化,因此它会越来越大,因此代码执行的时间会越来越长

在第二个示例中,每当
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仍然更好,但是知道它很好。