将 API 响应 CSV 传递到列表而不写入文件
Pasrse API Response CSV to List without writing to file
目标:
- 直接读取 .csv API 对 Python 列表的响应
我正在使用人口普查局的 Bulk Geocoder to get the lat/long of many addresses. The 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+ 从文件写入 file/read。
csv.reader
class 接受 行 的可迭代;如果您在传递内容之前按行拆分内容,它应该可以工作:
reader = csv.reader(response.content.split('\n'))
目标:
- 直接读取 .csv API 对 Python 列表的响应
我正在使用人口普查局的 Bulk Geocoder to get the lat/long of many addresses. The 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+ 从文件写入 file/read。
csv.reader
class 接受 行 的可迭代;如果您在传递内容之前按行拆分内容,它应该可以工作:
reader = csv.reader(response.content.split('\n'))