2014-10-19 126 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()爲行創建了一個新列表,所以在這裏不需要清除行。