在Linux中用Python读取EXE、MSI和ZIP文件元数据

7 投票
4 回答
4838 浏览
提问于 2025-04-16 04:18

我正在写一个Python脚本,目的是把一大堆Windows安装程序的相关信息放进数据库里。

我想知道怎么用在Linux上运行的Python来读取EXE、MSI和ZIP文件中的一些元数据,比如公司名称、产品名称、版本号等等。

软件环境

我在64位的Ubuntu 10.04上使用Python 2.6.5和Django 1.2.1。

目前找到的内容:

有一些Windows命令行工具可以提取EXE文件的元数据(比如SysUtils里的filever),或者其他一些只在Windows上能用的命令行工具。我尝试通过Wine来运行这些工具,但遇到了一些问题,花了很多时间去找这些工具依赖的库和框架,结果也没能在Wine/Crossover上成功安装。

还有一些Win32模块可以在Python中做一些事情,但好像在Linux上不能运行,对吧?

附带问题:

显然,如果改变了文件的元数据,文件的MD5哈希值也会改变。有没有什么通用的方法可以在不考虑元数据的情况下对文件进行哈希处理,比如跳过前1024个字节?

4 个回答

1

为了回答你其中一个问题,你可以使用zipfile模块,特别是里面的ZipInfo对象来获取压缩文件的元数据。

至于只对文件的数据进行哈希处理,前提是你得知道哪些部分是数据,哪些部分是元数据。因为很多文件格式存储元数据的方式都不一样,所以没有一个通用的方法。

2

hachoir-metadata 可以获取到“产品版本”,但是编译器会改变“文件版本”。所以返回的版本信息并不是我们需要的。

我找到一个简单有效的解决方案:

http://pev.sourceforge.net/

我测试过,效果很好。这个方法简单、快速而且稳定。

4

看看这个库:http://bitbucket.org/haypo/hachoir/wiki/Home,还有一个使用这个库的示例程序:http://pypi.python.org/pypi/hachoir-metadata/1.3.3。第二个链接是一个示例程序,它使用了Hachoir这个二进制文件处理库(第一个链接)来解析文件的元数据。

这个库可以处理以下格式:

  • 压缩文件:bzip2、gzip、zip、tar
  • 音频文件:MPEG音频(“MP3”)、WAV、Sun/NeXT音频、Ogg/Vorbis(OGG)、MIDI、AIFF、AIFC、Real音频(RA)
  • 图像文件:BMP、CUR、EMF、ICO、GIF、JPEG、PCX、PNG、TGA、TIFF、WMF、XCF
  • 其他:Torrent
  • 程序文件:EXE
  • 视频文件:ASF格式(WMV视频)、AVI、Matroska(MKV)、Quicktime(MOV)、Ogg/Theora、Real媒体(RM)

此外,Hachoir还可以进行一些文件操作,我猜这包括一些基本的元数据处理。

撰写回答