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