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
相关产品推荐
相关产品推荐

