python中csv reader对象未识别csvreader.fieldnames属性
我正在尝试用Python的CSV模块提取一个CSV文件的表头。
这个CSV文件结构很简单,大概长这样:
这个, 那个, 其他
1, 2, 3
我做的步骤如下:
- 读取CSV文件,并创建一个读取对象
- 让读取器的迭代器跳到下一行,强制它至少访问第一行一次(根据CSV模块的文档:“如果在创建对象时没有作为参数传入,这个属性会在第一次访问时初始化,或者在从文件读取第一条记录时初始化。”)
- 把
.fieldnames
属性赋值给一个变量,然后打印出来
这里有一段代码来说明:
datafile = open(fname, "rb")
reader = csv.reader(datafile) #use csv module to parse in the header
reader.next() # read next line so header will be accessed
rfd_header = reader.fieldnames
print "header:\n"
print rfd_header
结果却出现了一个错误:
AttributeError: '_csv.reader'对象没有'fieldnames'属性
这听起来像是.fieldnames
属性不存在,但在Python 2.6.6的文档中是有的(我用的就是这个版本的Python)
如果有人能帮我解开这个谜团,我会非常感激。如果有其他方法可以提取表头,那就更好了!
谢谢。
4 个回答
0
如果你需要把结果放在一个列表里,可以这样做:
rfd_header = reader.next()
这段代码会把第一行(也就是表头/字段)存到一个叫“rfd_header”的变量里。
接下来,你可以遍历这个变量里的值,把它们放进一个列表里。
headerList = []
for item in rfd_header:
headerList.append(item)
最后,你可以把结果打印出来。
print headerList
6
试试用 csv.DictReader
,而不是 csv.reader
。文档里也提到了这一点:
DictReader 对象有一个公共属性:
csvreader.fieldnames - 如果在创建对象时没有作为参数传入,这个属性会在第一次访问时初始化,或者在从文件读取第一条记录时初始化。
11
如果你真的想用csv.reader而不是csv.DictReader,你只需要把
reader.next() # read next line so header will be accessed
rfd_header = reader.fieldnames
替换成
rfd_header = reader.next()