对于python的csv.DictReader,等效readline()

时间:2016-07-05 12:31:38

标签: python

使用readline()时,csv.DictReader是否没有等效内容?我需要在循环之前跳过文件的标题行,并且使用readline()是使用普通读取器变量这样做的好方法。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

DictReader()iterator object。使用对象上的next() function获取单个行:

reader = csv.DictReader(fileobj)
row = next(reader, None)

next()的第二个参数是一个默认值,如果iterable为空则返回;因此,如果没有更多行要阅读,row设置为None

顺便说一下,这也适用于文件对象。如果您没有指定任何字段名,DictReader() 会自动读取第一行,如果您想阻止使用第一行,则必须移动fileobj {1}}在从DictReader()对象读取之前的下一行:

next(fileobj, None)  # skip first line of the file
reader = csv.DictReader(fileobj)