在Python中,我试图用字节串来处理一些8位字符串。我发现字节串不是字符串中的必要行为。使用下标,它返回一个数字而不是长度为1的字节字符串。
In [243]: s=b'hello'
In [244]: s[1]
Out[244]: 101
In [245]: s[1:2]
Out[245]: b'e'
这使我在迭代它时非常困难。例如,此代码使用字符串,但字节字符串失败。
In [260]: d = {b'e': b'E', b'h': b'H', b'l': b'L', b'o': b'O'}
In [261]: list(map(d.get, s))
Out[261]: [None, None, None, None, None]
这打破了Python 2的一些代码。我也发现这种不规则性真的很不方便。任何人都能了解字符串的内容吗?
答案 0 :(得分:0)
字节字符串存储0-255范围内的字节值。 repr
字节只是查看它们的便利,但它们存储数据而不是文本。观察:
>>> x=bytes([104,101,108,108,111])
>>> x
b'hello'
>>> x[0]
104
>>> x[1]
101
>>> list(x)
[104, 101, 108, 108, 111]
将字符串用于文本。如果以字节开头,请对它们进行适当的解码:
>>> s=b'hello'.decode('ascii')
>>> d = dict(zip('hello','HELLO'))
>>> list(map(d.get,s))
['H', 'E', 'L', 'L', 'O']
但是如果你想使用字节:
>>> d=dict(zip(b'hello',b'HELLO'))
>>> d
{104: 72, 108: 76, 101: 69, 111: 79}
>>> list(map(d.get,b'hello'))
[72, 69, 76, 76, 79]
>>> bytes(map(d.get,b'hello'))
b'HELLO'
答案 1 :(得分:0)
您可以简单地decode
字符串,获取所需的元素并将其编码回去:
s=b'hello'
t = s.decode()
print(t[1]) # This gives a char object
print(t[1].encode()) # This gives a byte object