你如何存储原始字节的文本,而不在Python 2.x中丢失的信息?
-
20-08-2019 - |
题
假设我有存储以字节为单位的任何数据。例如:
0110001100010101100101110101101
我怎样才能将其存储为的打印的文本?最明显的方法是每隔0转换为字符“0”,并且每1〜字符“1”。事实上,这是目前我在做什么。我想知道我怎么能收拾他们更紧密,不会丢失信息。
我想在八组,以ASCII转换的比特,但一些比特组合是不 接受该格式。任何其他的想法?
解决方案
大约只使用类似的base64“安全”字符的编码是什么?结果 http://en.wikipedia.org/wiki/Base64
编辑:这是假设您想要安全地存储在文本文件和数据,例如
?在Python 2.x的,字符串要细(Python不使用空终止字符串,所以不用担心这一点)。
否则在3.x的检查出的字节和ByteArray对象。 http://docs.python.org/3.0/library/stdtypes。 HTML#字节的方法
其他提示
不知道你在说什么。什么
>>> sample = "".join( chr(c) for c in range(256) )
>>> len(sample)
256
>>> sample
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\
x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABC
DEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83
\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97
\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab
\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf
\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3
\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7
\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb
\xfc\xfd\xfe\xff'
的字符串sample
包含所有256个不同的字节。有作为“位的组合...不接受”没有这样的东西。
要使它的打印的,只需使用repr(sample)
- 非ASCII字符转义。正如所看到的上方。
尝试标准阵列模块或结构模块。这些支撑存储字节的空间有效的方式 - 但它们不直接支持位
您也可以尝试 HTTP://cobweb.ecn。 purdue.edu/~kak/dist/BitVector-1.2.html 或 HTTP: //ilan.schnell-web.net/prog/bitarray/
对于Python 2.x中,最好的办法是将它们存储在一个字符串。一旦你的字符串,你可以编码成使用与Python中的Base64模块安全的ASCII值。
import base64
encoded = base64.b64encode(bytestring)
这将大大超过存储冷凝的 “1” 和 “0”。
有关的BASE64模块的更多信息,请参见蟒文档。