Python跳过请求响应的标题行

2024-04-26 03:51:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在查询服务以获取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’ object is not an iterator


Tags: 文件csv数据代码com信息httpget
2条回答

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

相关问题 更多 >