将 API 响应 CSV 解析为列表而不写入文件
Posted
技术标签:
【中文标题】将 API 响应 CSV 解析为列表而不写入文件【英文标题】:Pasrse API Response CSV to List without writing to file 【发布时间】:2015-10-22 14:54:13 【问题描述】:目标:
直接读取 .csv API 响应 Python 列表我正在使用人口普查局的 Bulk Geocoder 来获取许多地址的纬度/经度。批量地理编码的documentation 在第 5-6 页。
我希望能够在不先保存文件的情况下将此 csv 读取到列表中。
我的第一次尝试是做以下事情:
得到响应:
import requests
import csv
url = 'http://geocoding.geo.census.gov/geocoder/locations/addressbatch'
payload = 'benchmark':'Public_AR_Current', 'vintage':'Current_Current', 'returntype':'locations'
files = 'addressFile':('Addresses.csv',open(tmp_file,'rb'),'text/csv')
response = requests.post(url,data=payload,files=files)
处理响应(不写入文件):
reader = csv.reader(response.content)
tmp_list = list(reader)
print(tmp_list)
输出是一维列表:
[[unique_id], [input_address], [match/no_match], [exact/non-exact], [output_address], [lat/long], [tiger_line_id], [tiger_line_side], [ ], ... .]
换行符被读取为要放入列表的元素(显示为 [ ])。
但是,如果我执行以下操作:
处理响应(首先写入文件响应):
with open('out.csv','w') as f:
f.write(response.content)
with open('out.csv','rb') as r:
reader = csv.reader(r)
tmp_list = list(reader)
print(tmp_list)
此方法的输出是所需的二维列表列表:
[[unique_id、input_address、match/no_match、exact/non-exact、output_address、lat/long、tiger_line_id、tiger_line_side]、...]
如何直接读取 .csv 对列表的响应?我想避免 I/O 操作,因为我可能一次执行 300 多个批次(这将是 300 多个写入文件/读取文件。
【问题讨论】:
看起来您已经在执行此操作而无需写入文件,响应可能需要在使用 csvreader 之前进行一些清理。你能发布一些原始回复吗? 【参考方案1】:csv.reader
类接受 行 的可迭代;如果在传递内容之前按行拆分内容应该可以:
reader = csv.reader(response.content.split('\n'))
【讨论】:
以上是关于将 API 响应 CSV 解析为列表而不写入文件的主要内容,如果未能解决你的问题,请参考以下文章
Jmeter FileWriter类,用于将自定义响应结果写到excel/txt/word/csv