如何确定 ZIP/RAR 文件的压缩方法

问题描述 投票:0回答:8

我正在使用一些 zip 和 rar 文件,我正在尝试分析每个文件的压缩方式的属性(压缩级别、压缩算法(例如 deflate、LZMA、BZip2)、字典大小、单词)大小等),但我还没有找到一种方法来做到这一点。

有什么方法可以通过软件或其他方式分析文件以确定这些属性?

干杯并感谢!

algorithm compression zip rar
8个回答
19
投票

这是一个相当老的问题,但无论如何我想投入我的两分钱,因为上面的一些方法对我来说并不容易使用。

您也可以使用 7-Zip 来确定这一点。 打开压缩包后有一栏是压缩方法:

7zip properties


12
投票

对于 ZIP - 是的,zipinfo

对于 RAR,可以使用 7Zip 或 WinRAR 轻松找到标头,请阅读随附的文档


8
投票

通过 7-Zip(或 p7zip)命令行:

7z l -slt archive.file

如果专门寻找压缩方法:

7z l -slt archive.file | grep -e '^---' -e '^Path =' -e '^Method ='

6
投票

我建议 hachoir-wx 查看这些文件。 如何安装 Python 包,或者您可以在使用 Windows 时尝试使用 PyPM 来使用 ActivePython。当您安装了必要的 hachoir 软件包后,您可以执行以下操作来运行 GUI:

python C:\Python27\Scripts\hachoir-wx

它使您能够浏览 RAR 和 ZIP 文件的数据字段。请参阅此屏幕截图作为示例。

对于 RAR 文件,请查看 WinRAR 安装目录中的 technote.txt 文件。这提供了 RAR 规范的详细信息。您可能会对这些感兴趣:

 HEAD_FLAGS      Bit flags: 2 bytes
                 0x10 - information from previous files is used (solid flag)
                 bits 7 6 5 (for RAR 2.0 and later)
                      0 0 0    - dictionary size   64 KB
                      0 0 1    - dictionary size  128 KB
                      0 1 0    - dictionary size  256 KB
                      0 1 1    - dictionary size  512 KB
                      1 0 0    - dictionary size 1024 KB
                      1 0 1    - dictionary size 2048 KB
                      1 1 0    - dictionary size 4096 KB
                      1 1 1    - file is directory

字典大小也可以在 WinRAR GUI 中找到。

 METHOD          Packing method 1 byte
                 0x30 - storing
                 0x31 - fastest compression
                 0x32 - fast compression
                 0x33 - normal compression
                 0x34 - good compression
                 0x35 - best compression

并且维基百科也知道这一点:

RAR 压缩实用程序是专有的,具有封闭的算法。 RAR 的所有者是尤金·罗沙尔 (Eugene Roshal) 的哥哥亚历山大·L·罗沙尔 (Alexander L. Roshal)。 RAR 版本 3 基于 Lempel-Ziv (LZSS) 和部分匹配预测 (PPM) 压缩,特别是 Dmitry Shkarin 的 PPMII 的 PPMd 实现。

对于 ZIP 文件,我首先查看 规格ZIP 维基百科页面。这些可能很有趣:

  general purpose bit flag: (2 bytes)
  compression method: (2 bytes)

2
投票

zipfile python 模块可用于获取有关 zip 文件的信息。

ZipInfo
类提供
filename
compress_type
compress_size
file_size
等信息...

用于获取 zip 存档中文件名和文件压缩类型的 Python 代码片段

import zipfile

with zipfile.ZipFile(path_to_zipfile, 'r') as zip:
    for info in zip.infolist():
        print(f'filename: {info.filename}')
        print(f'compress type: {info.compress_type}')

这会列出所有文件名及其对应的压缩类型(整数),可用于查找压缩方法。
您可以使用 infolist() 获得有关文件的更多info

接受的答案中链接的python模块不可用,

zipfile
模块可能有帮助


1
投票

对于 ZIP 文件,有一个命令 zipinfo。


0
投票

类型很简单,只需查看文件头(

PK
Rar
)。

至于其余的,我怀疑压缩内容中是否有信息。


0
投票

我知道这是一个旧线程。我不使用 python,有没有人有一个工具可以告诉我创建的 zip 文件是什么格式?我查看软件中使用的 zip 文件,我需要修改该 zip 文件中包含的 1 个文件,但是我使用的每个 zip 工具都会修改格式,并导致不兼容。在 Notepad++ 中查看时,这个该死的 zip 文件看起来就像纯文本。只需拥有所有常用的 PK zip 标头等即可。

任何建议都会很棒。我什至尝试了一些在线 Anylizer 工具,他们说它是一个视频文件。我认为他们很困惑。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.