创建 ZipFile 时出现 AttributeError

Posted

技术标签:

【中文标题】创建 ZipFile 时出现 AttributeError【英文标题】:AttributeError when creating ZipFile 【发布时间】:2017-04-28 01:24:45 【问题描述】:

问题

我在尝试从文件路径创建 zipfile.ZipFile 时收到 AttributeError: 'tuple' object has no attribute 'seek'

我不知道为什么,回溯对我的代码没有任何意义,这是 zipfile 模块中的错误,还是我没有正确设置?

我尽我所能遵循所有文档,但无济于事。

我正在做的事情有什么问题,是否有解决方法/修复它?

这是否也是我在使用urllib 时所犯的任何错误,例如从直接链接中检索文件?

代码

from urllib.request import urlretrieve
from os import path
from zipfile import ZipFile

download_url = "https://www.dropbox.com/s/obiqvrt4m53pmoz/tesseract-4.0.0-alpha.zip?dl=1"


def setup_program():
    zip_name = urlretrieve(download_url)

    zip_file = ZipFile(zip_name, "r")
    zip_file.extractall(path.abspath("__tesseract/"))
    zip_file.close()

setup_program()  # REMOVE after test

追溯

$ python downloader.py
Traceback (most recent call last):
  File "downloader.py", line 15, in <module>
    setup_program()
  File "downloader.py", line 11, in setup_program
    zip_file = ZipFile(zip_name, "r")
  File "C:\Python36\lib\zipfile.py", line 1100, in __init__
    self._RealGetContents()
  File "C:\Python36\lib\zipfile.py", line 1163, in _RealGetContents
    endrec = _EndRecData(fp)
  File "C:\Python36\lib\zipfile.py", line 241, in _EndRecData
    fpin.seek(0, 2)
AttributeError: 'tuple' object has no attribute 'seek'

提前感谢,任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

urlretrieve() 返回本地文件名和标题的元组。您应该获取该元组中的第一项并将其传递给 ZipFile 而不是元组本身。

zip_name, _ = urlretrieve(download_url)

【讨论】:

非常感谢您的好先生!在阅读文档时,我一定略过这个。接受为答案。 如果您将其放在答案中的某个位置,也可能对其他人有所帮助:zip_name, _ = urlretrieve(download_url)

以上是关于创建 ZipFile 时出现 AttributeError的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在使用 java.util.zip.ZipFile 打开空 ZIP 文件时出现异常?

在 python 2.7 中导入 zipfile 模块时出现语法错误

在 Spark 中的 EMR 上使用 --py-files 从 .zip 文件(使用 zipfile 包在 python 中创建)导入模块时出现问题

为啥我在尝试将大文件发布到核心 Web API 时出现 404

添加jdplay aar时出现 UnsatisfiedLinkError错误

“IBM437”不是ZipFile Read Method支持的编码名称