从python的f.read奇怪的回归

时间:2014-08-06 14:01:11

标签: python file-io

我正试图从我通过柏树之一开发的硬件中捕获一些数据。 fx2lp芯片。我用过柏树'用于将我的数据流样本记录到文件中的软件,我试图用python读取。但是,当我阅读它时,我得到一些有趣的输出,我不确定如何解释。

我打开这样的文件:

f = open("testdata_5Aug2014.dat","rb")

然后我以各种大小的块读取数据,类似于:

f.read(100)

通常,上述行(以及我想看到的)的结果是这样的:

'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x05\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

但我有时会得到包含' s' s' s的回报,如下所示:

'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14t\x14K\x01?\x00\xff??\x00\xff??\x00\xff??\x00\xff?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

这是一个问题,因为当我使用struct.unpack来解析它时,它不会返回任何附加了特殊字符的字节。

所以我的问题是:那些符号是什么?他们是怎么到那儿的?以及如何删除它们或处理它们?

1 个答案:

答案 0 :(得分:1)

您正在从文件中读取二进制数据,但f.read将该数据作为字符串返回。当您打印该字符串时,它会将这些字节解释为字符。但是,并非每个字节值都映射到可显示的字符,因此一些字节显示为转义序列:\x后跟两个十六进制数字。例如,0显示为\x00,255显示为\xff

某些值会映射到字符,例如63映射到'?'和116映射到't'。 ordchr函数可分别用于获取字符的数值和数字的字符映射,因此ord('t')返回116并且chr(63)返回'?'

无论哪种方式,无论它如何显示,您的数据都应该没问题,并且struct.unpack应该能够像往常一样使用它。