gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:50:06 25 4
gpt4 key购买 nike

如何单独解压它们?我想从 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)

最佳答案

我想第一个要回答的问题是:你为什么要像这样打包字符串?除非您将其作为数据结构传递给接受您在上面创建的格式的库,否则您不需要这样做:将字符串作为文本存储在文本文件中 - 而不是二进制文件。如果您需要空间/性能,请使用 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 要求传递的字节字符串包含的打包值的大小与传递的格式相等。

您可以通过首先切片第一个字段的大小来检索大小,并将其传递给解包,然后解包结构的其余部分:

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

但是当然你根本不能使用结构,如果你只使用字节串:

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 程序中通常不需要 - 如果您正在生成一个非常特定的文件供另一个应用程序使用,或者在 native 代码中调用一个 Python 绑定(bind)不正确的库,您才需要这个.

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

关于python-如何解压文本或字符串集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21732449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com