csv reader.fieldnames在python中不被识别为csv reader对象的属性

2024-06-28 20:12:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用CSV模块在Python中提取CSV文件的头。

CSV文件非常简单,看起来像:

This, That, The Other

1, 2, 3

我正在做以下工作:

  1. 读取CSV文件并使reader对象
  2. 将读卡器的迭代器推到下一行,以强制它至少访问第一行(来自csv模块文档:“如果在创建对象时未作为参数传递,则在第一次访问或从文件读取第一条记录时初始化此属性。”)
  3. .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' object has no attribute 'fieldnames'

这听起来好像不存在.fieldnames属性,但在Python2.6.6的文档中(与我使用的Python版本相同)

我希望能对这个秘密有所了解。如果有另一种方法来提取标题,那也太棒了!

谢谢。


Tags: 模块文件csv文档属性thatthisreader
3条回答

尝试csv.DictReader,而不是csv.reader。文件上也说:

DictReader对象具有以下公共属性:

csvreader.fieldnames-如果在创建对象时未作为参数传递,则在首次访问或从文件中读取第一条记录时初始化此属性。

http://docs.python.org/library/csv.html

如果您真的想使用csv.reader而不是csv.DictReader,您只需要替换

reader.next() # read next line so header will be accessed
rfd_header = reader.fieldnames

rfd_header = reader.next()

如果您需要列表中的结果,可以采取:

rfd_header = reader.next()

这应该将第一行(header/fields)存储到变量“rfd_header”

然后您可以迭代变量的值并将其放入列表中

headerList = []
for item in rfd_header:
    headerList.append(item)

然后你可以打印结果

print headerList

相关问题 更多 >