什么字符可用于分隔 python 2.7 字符串中的二进制数据?
What char can be used to seperate binary data in a python 2.7 string?
我有一个包含二进制数据条目的列表,每个条目的长度都是任意的。我想将这一切存储在一个大的二进制字符串中。考虑到此数据可能包含任何字符序列,我可能会选择分隔列表中的每个条目,如何将此列表打包成仍然具有不同条目的字符串?
你说的原因不能用一个字隔开。您可以指定一个特殊的分隔符,例如 0x0
。那么您还需要一种方法来转义出现在数据中的任何 0x0
。但是,您还需要在出现的任何地方转义转义字符。
不确定为什么需要二进制输出,所以这可能不适合你。但是,您可以使用 zlib:
将数据写入单个字符串
>>> import zlib
>>> l=[bin(i) for i in range(10)]
>>> zlib.compress(str(l))
'x\x9c\x8bV7H2P\xd7Q\x00R\x86P\n\xc6\x85\xf3a\x02\x060\x11\x84\x12\x84\x1a\xb8"\xa0\xaaX\x00\xe9\x95\x11\x14'
然后就可以轻松解压了:
>>> zlib.decompress(zlib.compress(str(l)))
"['0b0', '0b1', '0b10', '0b11', '0b100', '0b101', '0b110', '0b111', '0b1000', '0b1001']"
要从那里将其转换回列表,您可以使用 eval:
>>> new_l=eval(zlib.decompress(zlib.compress(str(l))))
>>> new_l
['0b0', '0b1', '0b10', '0b11', '0b100', '0b101', '0b110', '0b111', '0b1000', '0b1001']
与使用定界符相比,您最好为要遵循的对象的长度编写字节计数。
如果纯粹的 space 效率并不重要,另一种可能有效的方法是改用 pickle
。另一种选择是对字节进行 base64 编码,然后使用 base64 字符集之外的定界符。
pickle
协议应该可以做到。 dump
写入文件,dumps
写入字符串。
mylist = [list of large integers]
pickle.dump(mylist, open('somefile', 'wb'), protocol=2)
我有一个包含二进制数据条目的列表,每个条目的长度都是任意的。我想将这一切存储在一个大的二进制字符串中。考虑到此数据可能包含任何字符序列,我可能会选择分隔列表中的每个条目,如何将此列表打包成仍然具有不同条目的字符串?
你说的原因不能用一个字隔开。您可以指定一个特殊的分隔符,例如 0x0
。那么您还需要一种方法来转义出现在数据中的任何 0x0
。但是,您还需要在出现的任何地方转义转义字符。
不确定为什么需要二进制输出,所以这可能不适合你。但是,您可以使用 zlib:
将数据写入单个字符串>>> import zlib
>>> l=[bin(i) for i in range(10)]
>>> zlib.compress(str(l))
'x\x9c\x8bV7H2P\xd7Q\x00R\x86P\n\xc6\x85\xf3a\x02\x060\x11\x84\x12\x84\x1a\xb8"\xa0\xaaX\x00\xe9\x95\x11\x14'
然后就可以轻松解压了:
>>> zlib.decompress(zlib.compress(str(l)))
"['0b0', '0b1', '0b10', '0b11', '0b100', '0b101', '0b110', '0b111', '0b1000', '0b1001']"
要从那里将其转换回列表,您可以使用 eval:
>>> new_l=eval(zlib.decompress(zlib.compress(str(l))))
>>> new_l
['0b0', '0b1', '0b10', '0b11', '0b100', '0b101', '0b110', '0b111', '0b1000', '0b1001']
与使用定界符相比,您最好为要遵循的对象的长度编写字节计数。
如果纯粹的 space 效率并不重要,另一种可能有效的方法是改用 pickle
。另一种选择是对字节进行 base64 编码,然后使用 base64 字符集之外的定界符。
pickle
协议应该可以做到。 dump
写入文件,dumps
写入字符串。
mylist = [list of large integers]
pickle.dump(mylist, open('somefile', 'wb'), protocol=2)