gpt4 book ai didi

python - 在 Python 中将二进制数据写入文件

转载 作者:太空狗 更新时间:2023-10-29 22:15:55 24 4
gpt4 key购买 nike

我正在尝试将数据(文本、 float 据)写入二进制文件,稍后将由另一个程序读取。问题是这个程序(在 Fort95 中)非常特别;每个字节都必须位于正确的位置才能正确读取文件。我试过使用 Bytes 对象和 .encode() 来写入,但运气不佳(我可以从文件大小看出它正在写入额外的数据字节)。我试过的一些代码:

mgcnmbr='42'
bts=bytes(mgcnmbr)
test_file=open(PATH_HERE/test_file.dat','ab')
test_file.write(bts)
test_file.close()

我也试过:

mgcnmbr='42'
bts=mgcnmbr.encode(utf_32_le)
test_file=open(PATH_HERE/test_file.dat','ab')
test_file.write(bts)
test_file.close()

澄清一下,我需要的是整数值 42,以 4 字节二进制形式编写。接下来,我将以 4 字节二进制形式写入数字 1 和 0。那时,我应该正好有 12 个字节。每个都是一个 4 字节有符号整数,用二进制写成。我是 Python 的新手,似乎无法解决问题。有什么建议么?类似 this 的东西?我需要完全控制每个整数(以及后来的 4 字节 float )的字节数。

谢谢

最佳答案

您需要 struct模块。

import struct

fout = open('test.dat', 'wb')

fout.write(struct.pack('>i', 42))
fout.write(struct.pack('>f', 2.71828182846))

fout.close()

struct.pack 中的第一个参数是格式字符串。

格式字符串中的第一个字符指示字节顺序或 endianness数据的(最重要或最不重要的字节首先存储 - big-endian 或 little-endian)。字节顺序因系统而异。如果“>”不起作用,请尝试“<”。

格式字符串中的第二个字符是数据类型。不出所料,“i”代表整数,“f”代表 float 。字节数由类型决定。例如,短裤或“h”是两个字节长。还有无符号类型的代码。例如,“H”对应于一个无符号短。

struct.pack 中的第二个参数当然是要打包到 bytes 对象中的值。

这是我告诉你我在一些事情上撒了谎的部分。首先我说字节数是由类型决定的。这只是部分正确。给定类型的大小在技术上取决于平台,因为 C/C++ 标准(struct 模块所基于的标准)仅指定最小 大小。这让我想到了第二个谎言。格式字符串中的第一个字符还编码是使用标准(最小)字节数还是使用 native (平台相关)字节数。 (“>”和“<”都保证使用标准的最小字节数,在整数“i”或 float “f”的情况下实际上是四个。)它另外编码 alignment。的数据。

documentation on the struct module有格式字符串参数表。

您还可以将多个原语打包到一个字节对象中并实现相同的结果。

import struct

fout = open('test.dat', 'wb')

fout.write(struct.pack('>if', 42, 2.71828182846))

fout.close()

您当然可以使用 struct.unpack 解析二进制数据。

关于python - 在 Python 中将二进制数据写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25168616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com