ZIPファイルは、ZIPファイルのモジュールを使用して回避する方法があり、不平を言いますか?

StackOverflow https://stackoverflow.com/questions/488054

  •  20-08-2019
  •  | 
  •  

質問

私は、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')
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top