2014-10-19 81 views
0

我想从'//类型comentaries'中清除文本文件,这些文本文件从他们开始的地方开始到文本结束。 使用3所列出:在python 2.7追加

row=[] 
redakbezkom=[] 
cleantext=[] 

我需要一个由在文本中使用的单词列表的形式“干净”的文字。 迭代通过文本导致良好的清理,但追加是在清单中保存多个行的实例。

for line in Ulaz: 
    niz = line 
    del row[:] 
    del redakbezkom[:] 
    row=niz.split() 
    for words in row: 
    if words=='//': 
     break 
    else: 
     redakbezkom.append(words) 
    print redakbezkom 
    cleantext.append(redakbezkom) 
print cleantext 

因此打印在cleantext结果: [[最后一行],...(在文本次数线) 代替: [[第一线],[第二线] ,. ..,[last line]]

为什么要追加覆盖列表中的所有前面的行?

回答

0

del redakbezkom[:]清除对象中的元素,而不是创建一个新的元素。这就是redakbezkom对于每一行始终是相同的对象。

cleantext.append(redakbezkom)附加了对每行的对象redakbezkom的引用。然后你得到了对象redakbezkom的行数。

阅读:How do I pass a variable by reference?

for line in Ulaz: 
    niz = line 
    redakbezkom = [] 
    row=niz.split() 
    for words in row: 
    if words=='//': 
     break 
    else: 
     redakbezkom.append(words) 
    print redakbezkom 
    cleantext.append(redakbezkom) 

我上面的固定代码,通过为每个行新redakbezkom。由于row=niz.split()为行创建了一个新列表,所以在这里不需要清除行。