我有一个从库调用读取的字节缓冲区,我想解压缩单个文本文件的内容.
我试过了zlib
,但是我收到了这个错误:
>>> import zlib >>> zlib.decompress(buffer) error: Error -3 while decompressing data: incorrect header check
但ZipFile
它有效,但我必须使用临时文件:
import zipfile f = open('foo.zip', 'wb') f.write(buffer) f.close() z = ZipFile('foo.zip') z.extractall() z.close() with open('foo.txt', 'r') as f: uncompressed_buffer = f.read()
是否可以使用zlib
,如何避免使用临时文件?
是否可以使用zlib
不,zlib不适用于ZIP文件.
以及如何避免使用临时文件?
用途io.BytesIO
:
import zipfile import io buffer = b'PK\x03\x04\n\x00\x00\x00\x00\x00\n\\\x88Gzzo\xed\x03\x00\x00\x00\x03\x00\x00\x00\x07\x00\x1c\x00foo.txtUT\t\x00\x03$\x14gV(\x14gVux\x0b\x00\x01\x041\x04\x00\x00\x041\x04\x00\x00hi\nPK\x01\x02\x1e\x03\n\x00\x00\x00\x00\x00\n\\\x88Gzzo\xed\x03\x00\x00\x00\x03\x00\x00\x00\x07\x00\x18\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb4\x81\x00\x00\x00\x00foo.txtUT\x05\x00\x03$\x14gVux\x0b\x00\x01\x041\x04\x00\x00\x041\x04\x00\x00PK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00M\x00\x00\x00D\x00\x00\x00\x00\x00' z = zipfile.ZipFile(io.BytesIO(buffer)) # The following three lines are alternatives. Use one of them # according to your need: foo = z.read('foo.txt') # Reads the data from "foo.txt" foo2 = z.read(z.infolist()[0]) # Reads the data from the first file z.extractall() # Copies foo.txt to the filesystem z.close() print foo print foo2