阅读 zlib 档案列表
Read list of zlib archives
我有一个文件本身包含许多 zlib 档案。
文件结构如下:
+-------------------------+
|+-----------------------+|
|| CMF+FLG (78DA) ||
|+-----------------------+|
|+-----------------------+|
||...compressed data 1...||
|+-----------------------+|
|+-----------------------+|
|| ADLER32 ||
|+-----------------------+|
|
|+-----------------------+|
|| CMF+FLG (78DA) ||
|+-----------------------+|
|+-----------------------+|
||...compressed data 2...||
|+-----------------------+|
|+-----------------------+|
|| ADLER32 ||
|+-----------------------+|
|
|+-----------------------+|
|| CMF+FLG (78DA) ||
|+-----------------------+|
|+-----------------------+|
||...compressed data 3...||
|+-----------------------+|
|+-----------------------+|
|| ADLER32 ||
|+-----------------------+|
| |
|.........................|
| |
|+-----------------------+|
|| CMF+FLG (78DA) ||
|+-----------------------+|
|+-----------------------+|
||...compressed data n...||
|+-----------------------+|
|+-----------------------+|
|| ADLER32 ||
|+-----------------------+|
+-------------------------+
我需要遍历所有这些存档并提取它们。
我尝试了以下代码,但这仅从文件中提取了第一个存档。
for filename in sys.argv[1:]:
with open(filename, 'r') as compressed:
with open(filename + '-decompressed', 'w') as expanded:
data = zlib.decompress(compressed.read())
expanded.write(data)
你应该可以像这样使用一系列的解压对象:
import zlib
with open(filename, 'rb') as compressed:
data = compressed.read()
file_no = 0
while data:
d = zlib.decompressobj()
with open('{}_decompressed.{}'.format(filename, file_no), 'wb') as f:
f.write(d.decompress(data))
data = d.unused_data
file_no += 1
这将获取包含多个串联 zlib 压缩文件的单个文件,并将每个文件解压缩为单独的文件,并在原始文件名后附加 "_decompressed.n"。
关键是利用解压对象的unused_data
属性判断字符串中是否还有未压缩的数据
我有一个文件本身包含许多 zlib 档案。 文件结构如下:
+-------------------------+
|+-----------------------+|
|| CMF+FLG (78DA) ||
|+-----------------------+|
|+-----------------------+|
||...compressed data 1...||
|+-----------------------+|
|+-----------------------+|
|| ADLER32 ||
|+-----------------------+|
|
|+-----------------------+|
|| CMF+FLG (78DA) ||
|+-----------------------+|
|+-----------------------+|
||...compressed data 2...||
|+-----------------------+|
|+-----------------------+|
|| ADLER32 ||
|+-----------------------+|
|
|+-----------------------+|
|| CMF+FLG (78DA) ||
|+-----------------------+|
|+-----------------------+|
||...compressed data 3...||
|+-----------------------+|
|+-----------------------+|
|| ADLER32 ||
|+-----------------------+|
| |
|.........................|
| |
|+-----------------------+|
|| CMF+FLG (78DA) ||
|+-----------------------+|
|+-----------------------+|
||...compressed data n...||
|+-----------------------+|
|+-----------------------+|
|| ADLER32 ||
|+-----------------------+|
+-------------------------+
我需要遍历所有这些存档并提取它们。 我尝试了以下代码,但这仅从文件中提取了第一个存档。
for filename in sys.argv[1:]:
with open(filename, 'r') as compressed:
with open(filename + '-decompressed', 'w') as expanded:
data = zlib.decompress(compressed.read())
expanded.write(data)
你应该可以像这样使用一系列的解压对象:
import zlib
with open(filename, 'rb') as compressed:
data = compressed.read()
file_no = 0
while data:
d = zlib.decompressobj()
with open('{}_decompressed.{}'.format(filename, file_no), 'wb') as f:
f.write(d.decompress(data))
data = d.unused_data
file_no += 1
这将获取包含多个串联 zlib 压缩文件的单个文件,并将每个文件解压缩为单独的文件,并在原始文件名后附加 "_decompressed.n"。
关键是利用解压对象的unused_data
属性判断字符串中是否还有未压缩的数据