python-如何解压文本或字符串集

2024-05-16 22:24:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我怎样才能把它们分开包装呢??我想从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: 字符串txtlenstructpackdatatypestrvarname
1条回答
网友
1楼 · 发布于 2024-05-16 22:24:25

我想首先要回答的问题是:你为什么一开始就这样包装字符串? 除非将其作为数据结构传递给接受上述格式的库,否则不需要这样做:将字符串作为文本存储在文本文件中,而不是作为二进制。如果是需要空间/性能的情况,请使用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,然后再解压缩结构的其余部分,从而检索大小:

length = struct.unpack("B", text[0:1])[0]
gvrTxt = struct.unpack("%ds" % length, text[1:][0]

当然,如果您只使用bytestrings,那么根本不能使用struct:

gvrTxt = text[1:]

如果将上述结构连接在一起,请执行以下操作:

data = dataType + varName + txt

然后您必须单独解包,使用varName的长度来知道在哪里挑选 开始txt

datatype = struct.unpack("H", data[0:2])
lenvarname = ord (data[2])
varName = data[3: 3 + lenvarname]
txt = data [ 4+ lenvarname:]

但我坚持认为,这在Python程序中通常是不需要的——只有在生成一个非常特定的文件供另一个应用程序使用,或者在本机代码中调用一个库(该库具有非常不正确的Python绑定)时,才需要这样做。

另外,请注意,这些技术不允许对“文本”进行正确的处理,因为不能保证任何文本内容每个字符都有一个字节:请在进一步编码之前阅读http://www.joelonsoftware.com/articles/Unicode.html,即使您认为在您的生活中永远找不到unicode字符。因为你会的。你的程序会先命中他们。

相关问题 更多 >