我正在编写一个在目录中查看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
。有人可以解释一下发生了什么吗?
答案 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)