Python“List”对象不可调用

时间:2010-07-02 00:42:43

标签: python

我正在编写一个在目录中查看CSV的程序,并将每个CSV的内容附加到列表中。以下是违规代码的片段:

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。有人可以解释一下发生了什么吗?

4 个答案:

答案 0 :(得分:10)

我认为这是因为您将open重新定义为列表并在下一个循环迭代中调用它。 只需给列表另一个名字。

请注意,当您不需要正则表达式时,字符串具有split()方法。

答案 1 :(得分:5)

open是内置函数这一事实无关紧要。它可能是在同一模块中定义的函数。

基本问题是使用相同的名称来引用两个不同的对象(一个函数和一个列表),这两个对象都需要再次使用。当再次需要第一个对象时,名称引用第二个对象。结果:splat。黄金法则是:不要不假思索地重复使用名称。

答案 2 :(得分:2)

黄金法则是:永远不要为变量使用内置函数的名称!

这是别名的问题,只是不要调用列表open ..

答案 3 :(得分:2)

同意以前的答案:永远不要调用变量open或任何其他builtin

您可能对Python csv module感兴趣,它会正确解析re.split(',', line)不会的csv文件。

此外,您可以将文件对象用作逐行迭代器,如下所示:

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