我可以从另一个字节对象中获取长度为1的字节对象,而不进行切片吗?

时间:2014-08-19 15:02:52

标签: python string python-3.x byte

这是获取二进制数据字节的唯一方法吗?

index = 40
data = afile.read()
byte = data[index:index+1] # <- here

如果我使用byte = data[index],则会抛出错误:

TypeError: 'int' does not support the buffer interface

1 个答案:

答案 0 :(得分:1)

来自bytes documentation

  

由于字节对象是整数序列(类似于元组),对于字节对象 b b[0]将是一个整数,而b[0:1]将是一个字节长度为1的对象。(这与文本字符串形成对比,其中索引和切片都将生成长度为1的字符串。)

因此byte = data[index]byte分配一个整数值 - 正如您的错误消息所指出的那样,它不支持缓冲区接口。

可以而不是byte = data[index:index+1],写下这个:

byte = bytes([data[index]])

...依赖于bytes构造函数,如果传递一个序列(注意data[index]周围的括号),将使用它创建一个bytes对象 - 但是& #39;它实际上不再具有可读性,而且速度要慢得多(在我的机器上使用Python 3.4的速度提高了六倍)。