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

Python批量转换含0/255的CSV为二进制文件出错求助

问题分析与解决方法

你的代码核心错误在于把数值转成Unicode字符再编码:

  • chr(int(array[i][j]))会把255转换成Unicode字符ÿ,之后调用.encode()(默认UTF-8编码)会将这个字符转成两个字节0xC3 0xBF,而不是你需要的单字节0xFF。
  • 同理,0会被转成空字符\x00,虽然结果是对的,但整体逻辑错误导致255的输出不符合预期。

解决方法

方案1:用Numpy高效处理(推荐)

利用Numpy的uint8数据类型直接存储单字节数值,再通过tofile方法写入二进制文件,无需手动循环:

import numpy as np
import csv

csv_filename = '320x80_ImageTest_1_255.csv'
output_filename = "new_binary.bin"

# 读取CSV并转换为整数二维列表
with open(csv_filename) as f:
    reader = csv.reader(f, delimiter=';')
    data = [[int(val) for val in row] for row in reader]

# 转换为uint8类型数组(每个元素占1字节,0对应0x00,255对应0xFF)
img_array = np.array(data, dtype=np.uint8)

# 直接写入二进制文件
img_array.tofile(output_filename)

方案2:纯Python循环处理

如果不想依赖Numpy,直接用Python内置方法将整数转成单字节bytes:

import csv

csv_filename = '320x80_ImageTest_1_255.csv'
output_filename = "new_binary.bin"

with open(csv_filename) as f, open(output_filename, 'wb') as out_file:
    reader = csv.reader(f, delimiter=';')
    for row in reader:
        for val in row:
            # 将整数转换为1字节的bytes对象,字节顺序不影响0/255的结果
            out_file.write(int(val).to_bytes(1, byteorder='big'))

两种方案都会生成符合要求的二进制文件:每个0对应十六进制00,每个255对应十六进制FF,且保持原CSV的行列顺序。

内容的提问来源于stack exchange,提问作者mohamed AFASSI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:07:50