我怎样才能把它们分开包装呢??我想从txt中得到字符串的长度(使用的)和字符串本身?有什么帮助吗?
dataType = struct.pack('H', gvrDatatype)
varName = struct.pack('B' + str(len(gvrVarname)) + 's', len(gvrVarname), gvrVarname)
txt = struct.pack('B' + str(len(gvrTxt)) + 's', len(gvrTxt), gvrTxt)
Tags:
我想首先要回答的问题是:你为什么一开始就这样包装字符串? 除非将其作为数据结构传递给接受上述格式的库,否则不需要这样做:将字符串作为文本存储在文本文件中,而不是作为二进制。如果是需要空间/性能的情况,请使用SQL引擎—SQLITE可以正常工作。
另外,还试图说明上面的代码很难读取Python,这可能是 在Javascript中插入字符串和数字的方法,但在Python中,应该使用:
txt = struct.pack('B%ds' % len(gvrTxt) , len(gvrTxt), gvrTxt)
而不是txt = struct.pack('B' + str(len(gvrTxt)) + 's', len(gvrTxt), gvrTxt)
如前所述,如果不首先手动切片struct.unpack方法,则无法将其解压缩,因为unpack要求传递的字节字符串包含的压缩值大小与传递的格式相同。
您可以首先对第一个字段的大小进行切片,然后将其传递给unpack,然后再解压缩结构的其余部分,从而检索大小:
当然,如果您只使用bytestrings,那么根本不能使用struct:
如果将上述结构连接在一起,请执行以下操作:
然后您必须单独解包,使用
varName
的长度来知道在哪里挑选 开始txt
但我坚持认为,这在Python程序中通常是不需要的——只有在生成一个非常特定的文件供另一个应用程序使用,或者在本机代码中调用一个库(该库具有非常不正确的Python绑定)时,才需要这样做。
另外,请注意,这些技术不允许对“文本”进行正确的处理,因为不能保证任何文本内容每个字符都有一个字节:请在进一步编码之前阅读http://www.joelonsoftware.com/articles/Unicode.html,即使您认为在您的生活中永远找不到unicode字符。因为你会的。你的程序会先命中他们。
相关问题 更多 >
编程相关推荐