ZIPファイルは、ZIPファイルのモジュールを使用して回避する方法があり、不平を言いますか?
質問
私は、zip形式の私に送られ、いくつかのMMSメッセージを解凍しようとしています。問題は、時にはそれが動作し、他の人ではないということです。それは仕事をdoesntのときと、Pythonのzipファイルモジュールは、文句を言うと、それは悪いzipファイルであることを述べています。しかし、zipファイルは、UNIXのunzipコマンドを使用して細かい解凍ます。
これは、IVEが得たものです。
zippedfile = open('%stemp/tempfile.zip' % settings.MEDIA_ROOT, 'w+')
zippedfile.write(string)
z = zipfile.ZipFile(zippedfile)
私は「+ W」を使用し、それに文字列を書いています、文字列はbase64でが含まれているzipファイルの文字列表現をデコードします。
それから私はこのように実行します。
filelist = z.infolist()
images = []
for f in filelist:
raw_mimetype = mimetypes.guess_type(f.filename)[0]
if raw_mimetype:
mimetype = raw_mimetype.split('/')[0]
else:
mimetype = 'unknown'
if mimetype == 'image':
images.append(f.filename)
私はzipファイル内のすべての画像のリストを持ってこの方法です。 zipファイルモジュールは、ファイルのいくつか文句を言うので、しかし、このdoesntのは常に、働くます。
これを行う方法は、zipファイルモジュールを使用せずに、ありますか?
私は何とかアーカイブからすべての画像をretriveするために同じものを代わりにzipファイルを解凍してからUNIXコマンドを使用してもらえますか?
解決
そこにzip形式のデータを書き込む際に
あなたは非常におそらく、バイナリモードでファイルを開く必要があります。つまり、あなたが使用する必要があります。
zippedfile = open('%stemp/tempfile.zip' % settings.MEDIA_ROOT, 'wb+')
他のヒント
あなたはそれを書いた後、閉じて、ファイルを再度開く、または多分ファイルの先頭に模索する必要がある場合があります。
filename = '%stemp/tempfile.zip' % settings.MEDIA_ROOT
zippedfile = open(filename , 'wb+')
zippedfile.write(string)
zippedfile.close()
z = zipfile.ZipFile(filename,"r")
あなたはそれがまだエンコードされていないことを確認している。 - ?あなたは、文字列をbase64では、デコードされていますが、それをデコードする任意のコードを示していないと言います
data = string.decode('base64')
所属していません StackOverflow