2010-07-02 85 views
2

我正在編寫一個程序,該程序在目錄中查看CSV並將每個CSV的內容附加到列表中。這裏是有問題的代碼片段:Python「列表」對象不可調用

import glob 
import re 

c = glob.glob("*.csv") 
print c 
archive = [] 

for element in c: 
    look = open(element, "r").read() 
    open = re.split("\n+", look) 

    for n in open: 
     n = re.split(",", n)[0] 
     archive.append(n) 

然而,當我運行該腳本,我得到一個TypeError: 'list' object is not callable。有人能解釋一下發生了什麼嗎?

回答

9

我認爲這是因爲你重新定義了open作爲列表並在下一次循環迭代中調用它。 只要給列表另一個名字。

請注意,當您不需要正則表達式時,字符串有一個split()方法。

2

黃金法則是:永遠不要爲變量使用內建事物的名稱!

這是走樣的問題,只是不叫列表open ..

2

與以前的答案同意:不調用變量open或任何其他builtin

你可能感興趣int Python csv module,它將正確解析csv文件,re.split(',', line)不會。

此外,您還可以使用文件對象的行由行迭代器,像這樣:

for line in open('data.csv'): 
    do_something(line) 
5

事實上,open是一個內置的功能是無關緊要的。它可能是一個在同一個模塊中定義的函數。

基本的問題是,使用相同的名稱來引用兩個不同的對象(函數和列表),這兩個對象都需要再次。當再次需要第一個對象時,該名稱將引用第二個對象。結果:圖示。黃金法則是:不要不假思索地重用名字。

相關問題