ファイルが一杯なので、pythonのZipFile.writestr()が失敗したかどうかを調べるには?

zip64拡張機能を使用しないと、Zipファイルのサイズは2GBを超えることはできません。したがって、その制限を超えるファイルに書き込もうとすると動作しません。私は、このような文章を書こうとすると、例外が発生すると思っていましたが、私はそれを引き起こすことができませんでした。このような状況で例外が発生しない場合、どのように書き込みが成功したかどうかを判断するにはどうすればよいでしょうか?

3
trueの場合は、バグとして報告する必要があります。エラーは黙ってはいけません。 (編集:あなたが最新のバージョンを使用していると仮定します。)
追加された 著者 Michael Hoffman,
ファイルの内容を取得して文字列に保存して、文字列の長さ(1文字は1バイト)を確認し、続行するかどうかを選択してください。編集:今私はそれについて考える、その方法は非常に効率的ではないかもしれません。
追加された 著者 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
追加された
なぜ私が以前に例外をキャッチしていなかったのか分かりませんが、あなたが期待していたように、明らかに1つが発生しています。確認していただいてありがとうございます!
追加された 著者 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,