我正在尝试解压缩发送给我的一些彩信。问题是有时它有效,有些则无效。当它不起作用时,python zipfile模块会抱怨并说它是一个糟糕的zip文件。但是zip文件使用unix unzip命令解压缩。
这就是我所拥有的
zippedfile = open('%stemp/tempfile.zip' % settings.MEDIA_ROOT, 'w+')
zippedfile.write(string)
z = zipfile.ZipFile(zippedfile)
我正在使用'w +'并为其写一个字符串,该字符串包含一个zip文件的base64解码字符串表示。
然后我喜欢这个:
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文件中所有图像的列表。但这并不总是有效,因为zipfile模块会抱怨一些文件。
有没有办法在不使用zipfile模块的情况下执行此操作?
我可以以某种方式使用unix命令解压缩而不是zipfile,然后使用相同的东西来检索存档中的所有图像吗?
答案 0 :(得分:4)
在将压缩数据写入文件时,您很可能以二进制模式打开文件。也就是说,你应该使用
zippedfile = open('%stemp/tempfile.zip' % settings.MEDIA_ROOT, 'wb+')
答案 1 :(得分:0)
您可能必须关闭并重新打开该文件,或者在编写文件后寻找文件的开头。
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')