阅读zlib档案清单

2024-05-23 20:52:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含许多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        ||
|+-----------------------+|
+-------------------------+

我需要遍历所有这些档案并提取它们。 我尝试了以下代码,但这只从文件中提取第一个归档文件。在

^{pr2}$

Tags: 文件代码data档案结构compressedcmfzlib
1条回答
网友
1楼 · 发布于 2024-05-23 20:52:29

您应该能够使用一系列解压缩对象,如:

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压缩文件的文件,并将每个文件解压缩到一个单独的文件中,并在原始文件名后附加“\u decompressed.n”。在

关键是使用解压缩对象的unused_data属性来确定字符串中是否还有未压缩的数据。在

相关问题 更多 >