文件上的 Python3 struct pack 出现问题

Trouble with Python3 struct pack on a file

我有一些数据 'BBB', 175, 115, 67 如果我像这样将这些数据放入命令中:

from struct import pack; open("/home/pi/testfile4", "wb").write(pack("BBB", 175, 115, 67))

它 运行 很好,产生了我期望的结果。

现在,如果我使用 nano 和 运行 将以下命令将该信息放入纯文本文件中: bin_data = open('/home/pi/file', 'rb').read()

from struct import pack; open("/home/pi/testfile4", "wb").write(pack(bin_data))

我收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
struct.error: bad char in struct format 

如果我在文件的读取命令中有'rb'也没关系。无论有没有它都会产生相同的错误。

在 Python 方面,我是一个相对的新手,所以除了我正在尝试的方式之外,我不知道该怎么做。我尝试了 bytearray 但它没有以我预期的格式生成结果。

我在 Raspberry Pi 和 Python 3.7.3 以及 Mac 和 Python 3.8.2 上尝试过这个,他们都想出了相同的方法错误。

我到底哪里做错了,还有其他方法可以产生相同的结果吗?

如果您想知道我到底在做什么,我正在将数据转换为 Twinkly 圣诞灯可以接受的格式。这样三个字节的数据就是用RGB颜色给单个灯着色。一个 56 灯串需要一个 168 字节的文件用于单个帧。我试图在同一个文件中发送 24 帧,所以这是很多文本,Python 似乎不想在一个命令中处理那么多数据,至少来自解释器。

谢谢!

首先,您要传递 pack() 格式字符串 BBB 和 3 个 int,每个都可以存储在 unsigned char 中:

pack("BBB", 175, 115, 67)

在第二种情况下,你只是传递了pack()一个str(从文件中读取的内容,是'BBB', 175, 115, 67),它假定它是格式字符串。

请务必阅读 documentation

你可能想做这样的事情:

from struct import pack

with open("/home/pi/lights.txt") as colours_text_file:
    with open("/home/pi/lights.bin", "wb") as colours_bin_file:
        for line in colours_text_file:
            red, green, blue = map(int, line.rstrip().split(", "))
            colours_bin_file.write(pack("BBB", red, green, blue))

其中 /home/pi/lights.txt 是一个文本文件,内容如下:

175, 115, 67
175, 105, 67
175, 95, 67
175, 85, 67
175, 75, 67
175, 65, 67

它一行一行地读取,并将str转换为3 ints。

然后将3个int打包为unsigned char写入/home/pi/lights.bin.