>我正在查询服务以获取 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
异常