You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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'),完全不符合预期。

正确写法有两种:

  1. 直接取binary_data的切片(切片返回bytes对象):
data_new.write(binary_data[j:j+1])
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 14:24:57