是否可以从.zip读取只包含.dta文件的.dta文件?
例如,https://www.federalreserve.gov/econres/files/scfp2016s.zip包含一个文件:rscfp2016.dta,但是pandas.read_stata对它不起作用:
import pandas as pd
pd.read_stata('https://www.federalreserve.gov/econres/files/scfp2016s.zip')ValueError:给定文件的版本不是104、105、108、111 (Stata 7SE)、113 (Stata 8/9)、114 (Stata 10/11)、115 (Stata 12)、117 (Stata 13)或118 (Stata 14)。
如果zip只包含csv,read_csv支持通过默认推断压缩的compression参数读取压缩文件。read_stata缺乏此选项。
我可以通过下载和解压缩文件,然后读取它,但这是混乱的。
!wget https://www.federalreserve.gov/econres/files/scfp2016s.zip
!unzip scfp2016s.zip
df = pd.read_stata('rscfp2016.dta')有更好的方法吗?
发布于 2019-12-01 05:10:05
read_stata接受类似文件的对象,所以您可以这样做:
import pandas as pd
from io import BytesIO
from zipfile import ZipFile
from urllib.request import urlopen
url = 'https://www.federalreserve.gov/econres/files/scfp2016s.zip'
with urlopen(url) as request:
data = BytesIO(request.read())
with ZipFile(data) as archive:
with archive.open(archive.namelist()[0]) as stata:
df = pd.read_stata(stata)发布于 2019-12-01 05:11:28
您可以尝试使用请求:
import io
import zipfile
import requests
response = requests.get('https://www.federalreserve.gov/econres/files/scfp2016s.zip')
a = zipfile.ZipFile(io.BytesIO(response.content))
b = a.read(a.namelist()[0])
pd.read_stata(io.BytesIO(b)) https://stackoverflow.com/questions/59122596
复制相似问题