我正在尝试编辑一些打印文件,这些文件由一个非常短(<100个字节)的头(二进制)、许多@PJL...行(可读为纯文本)和二进制(以多种不同的语言之一表示)组成。
虽然可以将整个文件处理为二进制文件,但将@PJL行作为纯文本处理要容易得多。这将需要将文件中第一个@PJL和第一个\r之间的部分读取为文本,而不是后面跟着的是@PJL。
例如:
header
@PJL ... \r
@PJL ... \r
@PJL ... \r
b\01b\07...注意:虽然文件可以变得相当大,但@PJL行总是很短(最多只有几十行),因此将它们作为单个块读入内存没有问题。
如果你知道这是如何实现的,或者能指出正确的方向,我将是非常伟大的。
谢谢,
发布于 2022-08-24 11:10:54
正如您在注释中提到的那样,您希望能够逐行解析文件,而不是一次性解析全部文件。如果您一次迭代文件一个字节,并自己构建行,您就可以这样做:
with open("file.b", "rb") as f:
line = bytearray()
while (b := f.read(1)): # Read one byte
if b == b'\r': # end of line
# process line here
if line[0] == ord(b'@'): # Line starting with @
text_line = line.decode()
else:
pass # process binary line
line = bytearray() # Reset line
else:
line += b # Add byte to linehttps://stackoverflow.com/questions/73471493
复制相似问题