【问题标题】:Equivalent of readline() for python's csv.DictReader [duplicate]等效于 python 的 csv.DictReader 的 readline() [重复]
【发布时间】:2016-11-07 07:07:32
【问题描述】:

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

【问题讨论】:

标签: python


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    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)
    

    【讨论】:

      猜你喜欢
      • 2013-04-26
      • 2018-08-13
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      相关资源
      最近更新 更多