【问题标题】:Converting list of numbers to binary file将数字列表转换为二进制文件
【发布时间】:2020-04-02 22:45:48
【问题描述】:

我有一个很长的 Python 格式的大数列表

[429996711.2753906, 106845465.30664062, 47285925.673828125, 373352395.4082031, 934463030.1191406, 53994183.962890625, 455503649.6542969, 741004174.1660156, 725379998.9648438, 485329924.8046875, 16476769.255859375,...]

例如。我需要将每个数字从十进制转换为二进制,然后将这些二进制数保存到没有 CRLF 行尾的原始二进制文件中。任何人都可以说如何做到这一点?我无法在任何地方找到可用的答案。谢谢!

【问题讨论】:

标签: python list


【解决方案1】:

这个 sn-p 创建一个文件 data.bin,有 88 个字节(11 个双精度,每个 8 字节):

import struct

data = [429996711.2753906, 106845465.30664062,
    47285925.673828125, 373352395.4082031,
    934463030.1191406, 53994183.962890625,
    455503649.6542969, 741004174.1660156,
    725379998.9648438, 485329924.8046875,
    16476769.255859375]

packed = map(lambda i: struct.pack("@d", i), data)

with open("data.bin", "wb") as fh:
    for i in packed:
        fh.write(i)

【讨论】:

    【解决方案2】:
    1. 将您的小数转换为字节数组或类似的 - 请参阅 this SO thread 将浮点数转换为字节数组

    2. 将字节数组以二进制模式写入文件 - 在open() 函数中使用“wb”模式将文件标记为二进制,如this SO thread 中讨论的如何将整数字节数组写入一个二进制文件。

    # make file
    newFile = open("filename.txt", "wb")
    # write to file
    newFile.write(myBytearray)
    

    【讨论】:

      猜你喜欢
      • 2012-10-16
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 2023-02-03
      • 2017-09-12
      相关资源
      最近更新 更多