Python二进制?到文本/字符串

时间:2014-06-30 17:47:07

标签: python parsing

我正在尝试将可能的二进制文件解析为Python中的文本/字符串。我并不赞成文件格式,所以我假设它是二进制文件。基本上,它是来自MS regedit的导出密钥(* .reg)。如果我在Notepad++打开密钥,我可以轻松阅读。但是,如果我尝试迭代python中的行(特别是iPython Notebook),它会打印gobbledygook。这是一个示例:

InFile = open("F:\Uninstallkey.reg","r")

for line in InFile:
    print "%r" % (line)

InFile.close()

输出:

'\xff\xfeW\x00i\x00n\x00d\x00o\x00w\x00s\x00 \x00R\x00e\x00g\x00i\x00s\x00t\x00r\x00y\x00 \x00E\x00d\x00i\x00t\x00o\x00r\x00 \x00V\x00e\x00r\x00s\x00i\x00o\x00n\x00 \x005\x00.\x000\x000\x00\r\x00\n'
'\x00\r\x00\n'
'\x00[\x00H\x00K\x00E\x00Y\x00_\x00L\x00O\x00C\x00A\x00L\x00_\x00M\x00A\x00C\x00H\x00I\x00N\x00E\x00\\\x00S\x00O\x00F\x00T\x00W\x00A\x00R\x00E\x00\\\x00M\x00i\x00c\x00r\x00o\x00s\x00o\x00f\x00t\x00\\\x00W\x00i\x00n\x00d\x00o\x00w\x00s\x00\\\x00C\x00u\x00r\x00r\x00e\x00n\x00t\x00V\x00e\x00r\x00s\x00i\x00o\x00n\x00\\\x00U\x00n\x00i\x00n\x00s\x00t\x00a\x00l\x00l\x00]\x00\r\x00\n'
'\x00\r\x00\n'

在记事本++中:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall]

奇怪的是,在iPython中它正确打印:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall]

长话短说,如何判断文件格式以及如何转换文件以便将其打印/解析为文本?

2 个答案:

答案 0 :(得分:3)

如上所述,该文件位于utf-16中。以下是使用编码打开文件的简便方法:

import codecs
InFile = codecs.open(path_to_registry, encoding='utf-16')

答案 1 :(得分:2)

该文件似乎是一个纯文本文件,只是以little-endian UTF-16编码。不要使用普通的open函数,而是使用encoding "UTF-16LE"参数{{1}}打开文件。