由列表构造函数

时间:2016-09-05 21:22:46

标签: python types casting

我想读取 n 字节的二进制文件并将每个字节存储在列表中。但是,当我这样做时,每个字节都被转换为int

首先我创建一个随机文件。

$ head -c 16 > random.file

然后我尝试阅读它:

>>> with open('random.file', 'rb') as fp:
...     l = list(fp.read(8))
...     print(fp.read(8))
... 
b'@\xc2\xdf\x9f\xbbv\xa1\x90'
>>> l
[79, 233, 19, 116, 252, 50, 248, 144]
>>> type(l[0])
<class 'int'>

所以我理解我的字节值不能超过255但是Python自动转换的事实导致问题,因为没有得到预期的类型。

这是正常的吗?我怎么能避免这个?

1 个答案:

答案 0 :(得分:1)

您在字节列表中访问的任何单个字节只是一个int值:

>>> b"foo"[0]
102

如果要创建一个包含长度为1的字节列表的新列表,则必须明确地执行此操作:

>>> c = b"foo"
>>> l = []
>>> for i in range(0, len(c)):
...   l.append(c[i:i+1])
>>> l
[b'f', b'o', b'o']

但是我不确定我是否认为有任何理由这样做,因为访问现在嵌入新列表中的单个值将再次返回一个int。