Python写入二进制文件遇TypeError,转bytes()后无内容写入的问题
问题分析与解决
第一个错误:TypeError: a bytes-like object is required, not 'int'
核心原因是:当binary_data为bytes类型时,通过索引binary_data[j]取出的是单个整数(范围0-255),而以wb模式打开的文件,write()方法要求传入字节类对象(如bytes),无法直接接收单个整数。
你用bytes(binary_data[j])的写法存在错误:bytes()接收单个整数时,会生成对应数量的空字节对象(比如bytes(5)会得到b'\x00\x00\x00\x00\x00'),完全不符合预期。
正确写法有两种:
- 直接取
binary_data的切片(切片返回bytes对象):
data_new.write(binary_data[j:j+1])
- 将单个整数包装成列表后转
bytes:
data_new.write(bytes([binary_data[j]]))
第二个问题:文件无内容写入
文件没有内容的关键原因是文件未被正确关闭,缓冲区内容未刷新到磁盘。直接用open()打开文件后,若不调用close(),Python的缓冲区不会自动同步到磁盘,内容会留在内存中。
推荐使用with上下文管理器,它会自动在代码块结束时关闭文件,确保内容写入:
with open(Datei_neu, "wb") as data_new: for j in range(43): # range(0,43,1)可简化为range(43) data_new.write(binary_data[j:j+1])
若不想用with,可手动调用close():
data_new = open(Datei_neu, "wb") for j in range(43): data_new.write(binary_data[j:j+1]) data_new.close() # 必须调用此方法完成写入
更高效的简化写法
无需循环单个写入,直接写入目标切片即可:
with open(Datei_neu, "wb") as data_new: data_new.write(binary_data[:43])
内容的提问来源于stack exchange,提问作者Bulova
相关产品推荐
相关产品推荐

