将 API 响应 CSV 传递到列表而不写入文件

Pasrse API Response CSV to List without writing to file

目标:

我正在使用人口普查局的 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'))