繁体   English   中英

Python从请求响应中跳过标题行

[英]Python skip header row from request response

我正在查询服务以获取 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' 对象不是迭代器

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)

试试

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异常

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM