【发布时间】:2016-11-07 07:07:32
【问题描述】:
在使用csv.DictReader 时,readline() 是否没有等效项?我需要在循环之前跳过文件的标题行,使用readline() 是使用普通读取器变量的好方法。
【问题讨论】:
-
这有先有技术 ;-) 就像答案所暗示的那样,人们也可以查看Python 3.2 skip a line in csv.DictReader 来命名我遇到的第一个...
标签: python
在使用csv.DictReader 时,readline() 是否没有等效项?我需要在循环之前跳过文件的标题行,使用readline() 是使用普通读取器变量的好方法。
【问题讨论】:
标签: python
DictReader 对象是一个迭代器,因此调用其next 方法(通过在其上调用next)应该像readline 那样跳过(或返回)一行。
我需要在循环之前跳过文件的标题行
DictReader 对象不指定标题行。所有后续行(第一行之后)都作为值插入到 dict 中,第一行作为键,如下所示:
r,t,s
1,2,3
2,4,6
>>> f = open('sample.csv')
>>> r = csv.DictReader(f)
>>> next(r)
{'s': '3', 't': '2', 'r': '1'}
>>> next(r)
{'s': '6', 't': '4', 'r': '2'}
所以要跳过第一行,您必须在文件对象本身上调用next,然后传递该文件对象来创建您的DictReader
【讨论】:
DictReader() 是一个iterator object。使用对象上的next() function 来获取单独的行:
reader = csv.DictReader(fileobj)
row = next(reader, None)
next() 的第二个参数是在可迭代对象为空时返回的默认值;所以row 设置为None 如果没有更多的行要读取。
顺便说一句,这也适用于文件对象。如果您没有指定任何字段名,DictReader() 自动 将读取第一行,如果您想阻止使用第一行,您必须将 fileobj 移动到从DictReader() 对象读取之前的下一行:
next(fileobj, None) # skip first line of the file
reader = csv.DictReader(fileobj)
【讨论】: