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