ZipExtFile не имеет метода поиска в python3.7 - PullRequest
0 голосов
/ 26 февраля 2019

В документации zipfile для python 3.7 говорится, что метод zipfile.ZipFile.open возвращает объект ZipExtFile с методом seek:

В режиме 'r'Подобный файлу объект (ZipExtFile) доступен только для чтения и предоставляет следующие методы: read(), readline(), readlines(), seek(), tell(), __iter__(), __next__().Эти объекты могут работать независимо от ZipFile.

Однако, когда я пытаюсь запустить свой тестовый код:

from zipfile import ZipFile

text = b'hello world'

with ZipFile('spam.zip', 'w') as inzip:
    with inzip.open('eggs.txt', 'w') as infile:
        infile.write(text)

with ZipFile('spam.zip', 'r') as myzip:
    with myzip.open('eggs.txt', 'r') as myfile:
        print(myfile.read())
        myfile.seek(0)
        print(myfile.read())

Затем я получаю это сообщение об ошибке:

$ python3.7 zip_test.py
b'hello world'
Traceback (most recent call last):
  File "zip_test.py", line 13, in <module>
    myfile.seek(0)
  File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/zipfile.py", line 1025, in seek
    self._fileobj.seek(self._orig_compress_start)
  File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/zipfile.py", line 704, in seek
    if self.writing():
AttributeError: '_SharedFile' object has no attribute 'writing'

Кто-нибудь знает, что я здесь не так делаю?

Другое прочтение

Вот несколько ТАК вопросов, где люди, похоже, сталкиваются с этой проблемойХотя, возможно, со старыми интерпретаторами Python:

Обновление

Я использую версию Python 3.7.0.

1 Ответ

0 голосов
/ 26 февраля 2019

Вам необходимо перейти на более новую версию Python 3.7.x, вы столкнулись с подтвержденными и исправленными ошибками в ZipFile.seek() реализации , см. выпуск # 34035 .

Эти исправления были добавлены в 3.7.1rc1 версии , но я бы порекомендовал перейти прямо к 3.7.2, если это возможно.

...