Python 将二进制数据中的 cr 添加到 lf?
Python adding cr to lf in binary data?
我正在编写一个 python 脚本,该脚本将每行包含一对数字的 ascii 文件转换为直接二进制表示形式。这是我的脚本:
in_file = open("p02_0609.bin", 'r')
out_file = open("sta013.bin", 'w')
out_data = bytearray()
for line in in_file:
addr, i2c_data = [int(x) for x in line.split(" ")]
out_data.append(addr)
out_data.append(i2c_data)
out_file.write(out_data)
out_file.close()
in_file.close()
及其正在读取的文件示例(总共约 2000 行)
58 1
42 4
40 0
41 0
32 0
33 0
34 0
35 0
36 0
37 0
38 0
39 0
40 1
40 2
33 143
40 3
33 0
40 4
40 5
40 6
40 7
40 8
40 9
40 10
40 11
输出文件以一个奇数字节结束,这不应该是因为所有数据都是成对的,并且比预期的长了大约 80 个字节。在用十六进制编辑器四处寻找之后,我终于找到了罪魁祸首。 “10”(Ascii LF)的每个实例前面都附加了一个 CR。我如何让它停止这样做?
Tl;dr:Python 是个笨蛋,在没有意义的二进制数据中将 CR 添加到 LF。如何解决?
您正在处理文本文件,因此打开函数会自动添加行尾。您需要在open中使用模式'wb'来读取和写入字节。
我正在编写一个 python 脚本,该脚本将每行包含一对数字的 ascii 文件转换为直接二进制表示形式。这是我的脚本:
in_file = open("p02_0609.bin", 'r')
out_file = open("sta013.bin", 'w')
out_data = bytearray()
for line in in_file:
addr, i2c_data = [int(x) for x in line.split(" ")]
out_data.append(addr)
out_data.append(i2c_data)
out_file.write(out_data)
out_file.close()
in_file.close()
及其正在读取的文件示例(总共约 2000 行)
58 1
42 4
40 0
41 0
32 0
33 0
34 0
35 0
36 0
37 0
38 0
39 0
40 1
40 2
33 143
40 3
33 0
40 4
40 5
40 6
40 7
40 8
40 9
40 10
40 11
输出文件以一个奇数字节结束,这不应该是因为所有数据都是成对的,并且比预期的长了大约 80 个字节。在用十六进制编辑器四处寻找之后,我终于找到了罪魁祸首。 “10”(Ascii LF)的每个实例前面都附加了一个 CR。我如何让它停止这样做?
Tl;dr:Python 是个笨蛋,在没有意义的二进制数据中将 CR 添加到 LF。如何解决?
您正在处理文本文件,因此打开函数会自动添加行尾。您需要在open中使用模式'wb'来读取和写入字节。