【问题标题】:How to read data from a zipfile on a website without locally downloading zipfile如何在不本地下载 zipfile 的情况下从网站上的 zipfile 读取数据
【发布时间】:2022-05-02 22:43:56
【问题描述】:

我正在使用以下代码:

import zipfile
import urllib

link = "http://www.dummypage.com/dummyfile.zip"
file_handle = urllib.urlopen(link)
zip_file_object = zipfile.ZipFile(file_handle, 'r')

我在执行时收到以下错误。请帮忙。

Traceback (most recent call last):
  File "fcc.py", line 34, in <module>
    zip_file_object = zipfile.ZipFile(file_handle)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 770, in __init__
    self._RealGetContents()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 807, in _RealGetContents
    endrec = _EndRecData(fp)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 208, in _EndRecData
    fpin.seek(0, 2)
AttributeError: addinfourl instance has no attribute 'seek'

【问题讨论】:

  • ZipFile 需要具有seek() 函数的类文件对象,而urlopen 不创建类文件对象。使用io.ByteIO在内存中创建类文件对象,并将来自互联网的数据放入该对象中。

标签: python python-2.7 python-zipfile


【解决方案1】:

您需要一个流处理程序接口来处理内存中的数据。对于文本数据,最常用的库是StringIO。对于二进制数据,正确的库是io

import io
import urllib
import zipfile

link = "http://www.dummypage.com/dummyfile.zip"
file_handle = io.BytesIO(urllib.urlopen(link).read())
zip_file_object = zipfile.ZipFile(file_handle, 'r')

关键是,文件的下载确实完成了,但它会在一个临时文件夹中。而且你不需要关心它

【讨论】:

  • 非常感谢毛罗。最后我的脚本正在工作。我很兴奋!!!!
【解决方案2】:

您可以使用外部工具吗? @ruario 对Bash - how to unzip a piped zip file (from “wget -qO-”) 的回答非常有趣。基本上,zip 将其目录存储在文件的末尾,而 zip 工具往往需要整个文件才能到达该目录。但是,zip 还包括内联标题,一些工具可以使用这些标题。如果您不介意拨打bsdtar(或其他工具),您可以这样做:

import urllib
import shutil
import subprocess as subp

url_handle = urllib.urlopen("test.zip")
proc = subp.Popen(['bsdtar', '-xf-'], stdin=subp.PIPE)
shutil.copyfileobj(url_handle, proc.stdin)
proc.stdin.close()
proc.wait()

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多