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



我在请求中得到了一个以application/zip为主体的application/octect流。响应对象从一个api调用返回,里面有一个csv文件。如果可能的话,我正在尝试将csv文件读取到panda,而不写入磁盘。如果我想把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)

如果熊猫自己搞不清楚,你可以试着按摩一些参数。

# 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]}'))

最新更新