2016-07-05 59 views
0

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

+0

有现有技术的此;-)喜欢的答案提示,人们还可以看[3.2的Python跳过csv.DictReader线(http://stackoverflow.com/questions/4787723/python -3-2-skip-a-line-in-csv-dictreader)来命名我遇到的第一个... – Dilettant

回答

2

DictReader对象是一个迭代器,所以调用它的next方法(通过调用它next)应该跳过(或恢复)一行,就像readline会。

我需要循环

DictReader对象不指定标题行之前要跳过的文件的标题行。所有后续行(第一后)是否插值的字典,与第一排的按键,就像这样:

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

DictReader()iterator object。使用next() function对象上得到各行:

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

的第二个参数是next()默认值返回,如果可迭代为空;如果没有更多行要读取,则row设置为None

顺便说一句,这也适用于文件对象。并且因为DictReader()自动将读取第一行(如果您未指定任何字段名称),如果要防止使用第一行,则必须在从DictReader()对象读取数据之前将fileobj移动到下一行:

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