目标:
我正在使用人口普查局的批量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+写入文件/从文件读取。
答案 0 :(得分:1)
csv.reader
类接受可迭代的行;如果你在传入内容之前按行分割内容应该可以工作:
reader = csv.reader(response.content.split('\n'))