微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 URL 读取 Tarfile

如何解决从 URL 读取 Tarfile

尝试从 URL 读取 tarfile

主要是从网站上抓取数据。甚至尝试使用 gzip 打开文件,但它产生了类似的错误。请为此提出一个解决方案。

import tarfile
from io import BytesIO
import urllib.request as urllib2

rt = urllib2.urlopen("https://opentender.eu/data/files/CY_ocds_data.json.tar.gz").read()
csvzip = tarfile.open(BytesIO(rt),mode='r:gz')

这是产生类型错误

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-23-2ed9e3f5bdd6> in <module>()
      4 import urllib.request as urllib2
      5 rt = urllib2.urlopen("https://opentender.eu/data/files/CY_ocds_data.json.tar.gz").read()
----> 6 csvzip = tarfile.open(BytesIO(rt),mode='r:gz')
      7 # csvzip.printdir()

2 frames
/usr/lib/python3.7/gzip.py in __init__(self,filename,mode,compresslevel,fileobj,mtime)
    166             mode += 'b'
    167         if fileobj is None:
--> 168             fileobj = self.myfileobj = builtins.open(filename,mode or 'rb')
    169         if filename is None:
    170             filename = getattr(fileobj,'name','')

TypeError: expected str,bytes or os.pathLike object,not _io.BytesIO

解决方法

也许这样会更好:

import tarfile
import urllib.request as urllib2

rt = urllib2.urlopen("https://opentender.eu/data/files/CY_ocds_data.json.tar.gz")
csvzip = tarfile.open(fileobj=rt,mode='r:gz')

urlopen 函数返回一个文件对象,然后你将它传递给 tarfile.open。

鲍比

,

您必须使用 tarfile.open 关键字参数调用 fileobj

csvzip = tarfile.open(fileobj=BytesIO(rt),mode='r:gz')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。