【问题标题】:Python skip header row from request responsePython从请求响应中跳过标题行
【发布时间】:2019-12-14 06:45:00
【问题描述】:

我正在查询服务以获取 csv 数据,我想通过跳过标题信息将此 csv 提取附加到另一个文件 代码 -

response = requests.get('http://myservice.com&format=csv')
with open('out.csv', 'a', new like='') as f:
   writer = csv.writer(f)
   for line in response.iter_lines():
        next(line)
        writer.writerow(line.decode('utf-8').split('|'))

尝试了上述方法,但我得到了错误

‘bytes’对象不是迭代器

【问题讨论】:

    标签: python python-3.x python-requests


    【解决方案1】:

    response.iter_lines() 是迭代器,lines 是迭代的值。所以打电话给next() 没有多大意义。

    你可以:

    iter_lines = response.iter_lines()
    next(iter_lines, None)
    for line in iter_lines:
        writer.writerow(line.decode('utf-8').split('|'))
    

    您也可以尝试直接读入csv.DictReader,例如:

    response = requests.get('http://myservice.com&format=csv')
    with open('out.csv', 'a') as f:
        reader = csv.DictReader(response.text.splitlines(), delimiter='|')
        writer = csv.DictWriter(f, reader.fieldnames)
        writer.writerows(reader)
    

    【讨论】:

      【解决方案2】:

      试试

      response = 
      requests.get('http://myservice.com&format=csv')
      with open('out.csv', 'a', new like='') as f:
          writer = csv.writer(f)
          rows = response.iter_lines()
          next(rows)
          for line in rows:
              writer.writerow(line.decode('utf-8').split('|'))
      

      rows 是需要跳过头部的迭代器,而 line 是读取的每一行的实际内容。

      for 循环只是遵循迭代协议,即

      • 它通过在对象上调用iter 来获得一个迭代器(迭代器返回自身,如本例所示)
      • 它会一直调用 next,直到引发 StopIteration 异常

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-15
        • 2014-12-08
        • 1970-01-01
        • 2016-11-19
        • 1970-01-01
        • 1970-01-01
        • 2022-08-23
        • 2015-08-18
        相关资源
        最近更新 更多