2011-10-27 9 views
3

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

+0

文字列の長さ(1つの文字は1バイト)を確認し、続行するかどうかを選択します。編集:今私はそれについて考える、その方法は非常に効率的ではないかもしれません。 – Griffin

+1

使用しているPythonのバージョンは? Python 2.7.2のドキュメントには、ZIPファイルにZIP64機能が必要であるが、そのファイルにはZIPファイルがある場合に発生する[zipfile.LargeZipFile](http://docs.python.org/library/zipfile.html#zipfile.LargeZipFile)例外があります。有効になっていません。 –

+2

trueの場合、[バグとして報告する]必要があります(http://bugs.python.org/)。エラーは黙ってはいけません。 (編集:あなたが最新のバージョンを使用していると仮定します。) –

答えて

0

私は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

なぜ私は例外をキャッチしていないのか分かりませんが、あなたが期待しているように、明らかに1つが発生しています。確認していただいてありがとうございます! –

0
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ファイルで使用できるかどうかはわかりません。 –

関連する問題