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

标签 python struct unpack

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

相关文章:

python - 使用 python pandas 读取 .reg 文件

python - 通过结构 grepping 文件时出错

C++ 在循环中创建和收集结构

python - 解压元组内的元组

perl - 你什么时候使用 unpack ('h*' ...) 或 pack ('h*' ...)?

python - 按完整路径导入具有相似内部模块名称的 python 包

c - 结构C : Storing values in an array

c - c中的链表子串

python - Python:如何从4字节字节数组中获取4字节大小的整数?

python - 在 csv 文件中查找每个月的最高温度?