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('|'))

尝试了上述操作,但出现错误

"字节"对象不是迭代器

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

最新更新