我们使用 struct.unpack 读取从所有 C 结构字段及其值(整数和字符串)的转储中创建的二进制文件。然后使用解压缩的元组创建字段及其值的中间字典表示,稍后将其写入文本文件输出。
文本文件输出显示字符串如下:
ID = b'000194901137\x00\x00\x00\x00'
timestampGMT = 1489215906
timezoneDiff = -5
timestampPackage = 1489215902
version = 293
type = b'FULL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
该程序之前是用 python 2.6 编写的,它曾经可以正常工作。我们在写入文本文件时使用了下面的 lambda 表达式来删除不需要的十六进制字符:
filtered_string = filter(lambda x: x in string.printable, line)
移动到 Python 3.5,不再支持 lambda 表达式,因为它现在返回一个不能轻易转换为字符串的过滤器。
将这些二进制字符串文字转换为等效的 ascii 文本(没有尾随 NUL'\x00')的 Pythonic 方法是什么,因此将其写为普通字符串值。
此外,由于每个文件要处理数千个条目(同样有多个文件),因此在当前上下文中寻找一些可能的最佳解决方案。