3

TypeError: 'list' does not support the buffer interface尝试运行以下命令时出现错误:

file = open(filename + ".bmp", "rb")
data = file.read()
file.close()
new = []

for byte in data:
    byte = int(byte)
    if byte%2:#make even numbers odd
        byte -= 1
    new.append(bin(byte))

file = open(filename + ".bmp", "wb")
file.write(new)
file.close()

为什么会这样?我认为这是由于我正在写入的数据类型,.bmp但我不确定我做错了什么。

4

1 回答 1

3

读完文件后,data是一个bytes对象,它的行为类似于数字列表,但不是数字列表,而是new一个实际的数字列表。二进制文件只支持写入字节,所以这就是你需要给它的。

一种解决方案是替换file.write(new)file.write(bytes(new)).

这是对代码的更短的重写:

with open(filename+'.bmp', 'rb') as in_file:
    data = in_file.read()

new_data = bytes(byte//2*2 for byte in data)

with open(filename+'.bmp', 'wb') as out_file:
    out_file.write(new_data)

请注意,BMP 格式包含一些标头,而不仅仅是像素数据,因此在进行此类修改后可能会损坏。

于 2013-06-13T17:02:51.090 回答