Как определить, что Python ZipFile.writestr () завершился ошибкой из-за переполнения файла? - PullRequest
3 голосов
/ 27 октября 2011

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

Ответы [ 2 ]

0 голосов
/ 28 октября 2011

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

$ python write-big-zip.py
Traceback (most recent call last):
  File "write-big-zip.py", line 7, in <module>
    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 голосов
/ 28 октября 2011
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.Но если нет подходящего исключения (которое должно быть), оно может служить временным решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...