十六进制文件到字符串数组?

Hex file to string array?

我有过时格式的文件,其中包含我想要提取的关键字符串和数字。如果我在十六进制编辑器中查看文件,我可以看到字符串形式的信息。如何读取此十六进制文件并使用 python?

打印出所需的字符串

这是一个小样本:

ÎFª∆3.0B International Inc.ANONYMOUS, ANONYMOUS 1269959PL 1Thu Sep  2 09:39:29 2004MMWed Aug 25 12:26:17 2004[GTV]øº—¯øÃ—¯@ˇ˝ôôôö?øÒ\ƒzO§kø∏˜QÎÖ@5ëÎ8QÎÖ?@o◊Á@p(@[ø! @n}†@p∫!@r⁄˚Ä?@Y2.16.840.1.113662.2.12.0.3012.1093437427.1484=P¡AP beamˇˇˇˇˇˇ¸-B-21EX10718X@YAAB@Yhh¥Z@4@D¿¿@FÄ?@4@D¿$¿$@FÄ?
µÏì‡ê??????????????????????????@4@D¿4¿4@N?@ÃÃÃÃÃÕ@ÃÃÃÃÃÕ@@øÒ\ƒzO§kø∏˜QÎÖ@5ëÎ8QÎÖ?øÒ\ƒzO§k@!€È  ≠k¥@5ëÎ8QÎÖ?
µÏì‡ê
µÏì‡ê
µÏì‡ê?ˇˇˇˇ
µÏì‡ê
µÏì‡ê
µÏì‡ê@Yˇˇ¸ˇ2ÑÄ?ÁWuwWux?›]’›]’‡?˙˙Çæ†Ø§?ŸDA¯˜&ëó???ˇˇ¸ˇˇ˛I?“I$íI$í???í€?‚I$íI$í???$m?Îm∂€m∂€???  ∂ˇ@VÅüǧu¿øÒ\ƒzO§kø∏˜QÎÖ@5ëÎ8QÎÖ?øÒ\ƒzO§k@!€È ≠k¥@5ëÎ8QÎÖ?CerroAAAÖÓ@I
µÏì‡ê@N
µÏì‡ê@ 
µÏì‡ê
µÏì‡ê
µÏì‡ê1¿ô`@√ʆ?¿

如果您正在寻找类似于 unix 工具 string, you can mmap the file and then use itertools.groupby 的东西来提取可打印范围内的连续 字节 的序列(32 到 127,假设您的字符串"legacy" 文件使用 ASCII 编码。

这里是一个可能的起点:

fname = 'wine_gecko-2.24-x86.msi'
threshold = 5

with open(fname, 'rb') as f:
    for k, g in itertools.groupby(mm, lambda b: 32 <= ord(b) <= 127):
         if k:
             gs = b"".join(g)
             if len(gs) > threshold:
                 print(gs)