Как узнать, не вызвана ли ошибка Python ZipFile.writestr (), потому что файл заполнен?

Без использования расширений zip64 размер Zip не может превышать 2 ГБ, поэтому попытка записи в файл, который поместил бы его поверх этого предела, не будет работать. Я ожидал, что когда такое письмо будет предпринято, это вызовет исключение, но я не смог заставить его подняться. (В документации не говорится об этом.) Если какое-либо исключение не возникает в таких обстоятельствах, как бы я (эффективно) поймал определение того, была ли запись успешной или нет?

3
Если это правда, вы должны сообщить об этом как об ошибке . Ошибки не должны проходить молча. (Edit: предполагается, что вы используете последнюю версию, то есть.)
добавлено автор Michael Hoffman, источник
Как получить содержимое файла и сохранить его в строке, а затем проверить длину строки (один символ - один байт) и выбрать, продолжать или нет? Изменить: теперь, когда я думаю об этом, этот способ может быть не очень эффективным.
добавлено автор Griffin, источник
Какую версию Python вы используете? Документы Python 2.7.2 имеют zipfile.LargeZipFile исключение, которое поднял ", когда ZIP-файл потребует функции ZIP64, но это не было включено."
добавлено автор Peter Graham, источник

2 ответы

У меня есть исключение, пытающееся написать большие строки в zip-архив:

$ python write-big-zip.py
Traceback (most recent call last):
  File "write-big-zip.py", line 7, in 
    myzip.writestr('arcname%d'% i, b'a'*2**30)
  File "/usr/lib/python2.7/zipfile.py", line 1125, in writestr
    self._writecheck(zinfo)
  File "/usr/lib/python2.7/zipfile.py", line 1020, in _writecheck
    raise LargeZipFile("Zipfile size would require ZIP64 extensions")
zipfile.LargeZipFile: Zipfile size would require ZIP64 extensions

Использование скрипта:

#!/usr/bin/env python
"""Write big strings to zip file until error."""
from zipfile import ZipFile

with ZipFile('big.zip', 'w') as myzip:
    for i in range(4):
        myzip.writestr('arcname%d'% i, b'a'*2**30)
0
добавлено
Не знаю, почему я раньше не ловил исключения, но, очевидно, один из них поднимается, как и следовало ожидать. Спасибо за подтверждение!
добавлено автор Scott Hunter, источник
import os

size = os.path.getsize("file") #Get the size of the file.
size = size/1073741824 #Converting bytes to GB.

if size < 2: # < is probably safer than <=
        #do the zipping
else:
        print "The file is too large!"

Разумеется, это не идеально, но это может быть временным решением, пока не будет найден лучший. Опять же, я не думаю, что это очень хороший способ использования zip. Но если нет соответствующего исключения (которое должно быть), оно может служить временным решением.

0
добавлено
Не уверен, что это можно использовать в zip-файле, поскольку он все еще открыт.
добавлено автор Scott Hunter, источник
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community