当前位置: 首页 > 知识库问答 >
问题:

将压缩后的Stata文件从URL读入

缪志新
2023-03-14

能读一本书吗。仅包含的zip文件。dta来自URL的文件?

例如https://www.federalreserve.gov/econres/files/scfp2016s.zip包含一个文件:rscfp2016。dta,但是熊猫。read_stata不适用于它:

import pandas as pd
pd.read_stata('https://www.federalreserve.gov/econres/files/scfp2016s.zip')

ValueError:给定Stata文件的版本不是104、105、108、111(Stata 7SE)、113(Stata 8/9)、114(Stata 10/11)、115(Stata 12)、117(Stata 13)或118(Stata 14)

read_csv支持读取zip文件,如果zip只包括csv,通过压缩参数,默认推断压缩。read_stata缺少此选项。

我可以下载并解压文件,然后读取它,但这很混乱。

!wget https://www.federalreserve.gov/econres/files/scfp2016s.zip
!unzip scfp2016s.zip
df = pd.read_stata('rscfp2016.dta')

还有更好的办法吗?

共有2个答案

巫马玉堂
2023-03-14

您可以尝试与请求:

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)) 

郝永思
2023-03-14

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)
 类似资料:
  • 我有一个需要压缩的文件列表,我正在使用ZipoutStream。 当我得到文件时,我将每个文件设置为只读。(我尝试过file.setWritable(false)和file.setReadOnly()) 原始文件被更改,但保存在zip中的文件不仅准备好了。我猜这是因为我必须使用FileInputStream将每个文件添加到zip中。 对于测试,我使用的是我在网上找到的示例代码。 有没有办法使压缩后

  • 问题 你想读写一个gzip或bz2格式的压缩文件。 解决方案 gzip 和 bz2 模块可以很容易的处理这些文件。 两个模块都为 open() 函数提供了另外的实现来解决这个问题。 比如,为了以文本形式读取压缩文件,可以这样做: # gzip compression import gzip with gzip.open('somefile.gz', 'rt') as f: text = f

  • 我正在使用Julia的ZipFile包来提取和处理csv文件。没问题,但是当我遇到zip文件中的zip文件时,我也想处理它,但是遇到了一个错误。 Julia ZipFile文档如下:https://zipfilejl.readthedocs.io/en/latest/ 对如何做到这一点有什么想法吗?

  • 问题内容: 使用python从gz压缩的文本文件中读取一行很容易,而无需完全提取该文件?我有一个大约200mb的text.gz文件。当我提取它时,它变成7.4gb。这不是我必须阅读的唯一文件。对于整个过程,我必须读取10个文件。尽管这将是一个顺序的工作,但我认为在不影响全部信息的情况下做到这一点将是明智之举。我什至不知道有可能。如何使用python完成?我需要逐行阅读文本文件。 问题答案: 您是否

  • 问题内容: 我想从csv(文本)文件逐行读取(在Python 2.7中),该文件是7z压缩的。我不想解压缩整个(大)文件,而是流线。 我尝试失败。我收到数据错误。请注意,此代码尚未逐行读取: 输出: 问题答案: 这将允许您迭代行。它部分源自我在另一个问题的答案中找到的一些代码。 在该时间点(),该模块未实现允许将存档成员作为字节流或字符流读取的API-其类仅提供了一次解压缩并返回成员中未压缩数据的

  • 我试图解压缩一个csv文件并将其传递给熊猫,这样我就可以处理这个文件了。 到目前为止,我尝试的代码是: 在最后一行之后,尽管python能够获取该文件,但在错误的末尾我得到了一个“不存在”。 有人能告诉我我做错了什么吗?