【问题标题】:Reading Tarfile from URL从 URL 读取 Tarfile
【发布时间】:2021-07-14 20:30:22
【问题描述】:

试图从 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

【问题讨论】:

    标签: python web-scraping tar tarfile


    【解决方案1】:

    也许这样会更好:

    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。

    鲍比

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-01-02
        • 1970-01-01
        • 2012-05-22
        • 2011-08-22
        • 2019-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多