【问题标题】: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 异常