如何从 api 响应中提取 application/zip?

How to extract application/zip from api response?

我在 requests.Response 对象中得到了一个 application/octect-stream,主体是 application/zip,对象是从 api 调用返回的,里面有一个 csv 文件。如果可能的话,我试图在不写入磁盘的情况下将 csv 文件读取到 pandas。 如果我想将 zip 文件作为 zip 文件写入路径,我该怎么做?

resp = requests.get(url, headers=headers)
resp.raise_for_status()
csv_obj = zlib.decompress(resp.content, wbits=zlib.MAX_WBITS|32)
print(type(csv_obj))
export_file = pd.read_csv(csv_obj)
export_file.to_csv('./Test_export.csv')

更新版本

# step 1: it turns out pandas can read zipped csv files even from urls!
some_dataframe = pandas.read_csv(url)

如果pandas自己想不通there are some parameters you can try to massage.

# step 1: it turns out pandas can read zipped csv files even from urls!
some_dataframe = pandas.read_csv(zip_filename, compression='zip', header=0) # etc..

之前的版本

我把之前版本的回答留在下面,以供参考。


# step 1: downloading the zip file
zip_filename = 'response.zip'
with open(zip_filename, 'wb') as zip_file:
  for chunk in response.iter_content(chunk_size=255): 
      if chunk:
        zip_file.write(chunk)

# step 2: turns out pandas can read zipped csv files!
some_dataframe = pandas.read_csv(zip_filename)
import pandas as pd
import io
import zipfile

resp = requests.get(url, headers=headers, stream=True)
resp.raise_for_status()
zfile = zipfile.ZipFile(io.BytesIO(resp.content))
# I only had one file, so calling zfile.namelist
export_file = pd.read_csv(zfile.open(f'{zfile.namelist()[-1]}'))