You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python创建或保存IEEE单/双精度格式的二进制数据文件?

问题分析与解决办法

首先明确核心问题:你用df.to_csv()保存的是文本格式的CSV文件,而非原文件的二进制格式,这才是内容不符的根本原因。另外,numpy的single类型本身就是IEEE 754单精度浮点(对应C语言的float),double是IEEE 754双精度浮点(对应C语言的double),和原文件的格式完全匹配,不存在格式转换的问题。

正确的二进制保存方法

方法1:直接用numpy写回二进制文件

既然读取后得到的是numpy结构化数组,直接用np.tofile()就能原样保存为和原文件格式一致的二进制文件,不需要经过pandas中转:

import numpy as np

bufType = np.dtype(
    [
        ('datetime', 'double'),  # 原代码字段名是text,建议改为datetime更直观
        ('humidity', 'single'),
        ('temperature', 'single'),
        ('extra_param', 'single')
    ]
)

path = r'C:\Users\Егор\Desktop\ЛК-44\pool-исходник\ccc.dat'
data = np.fromfile(path, dtype=bufType)

# 直接写回二进制文件
data.tofile('my_file.dat')

方法2:通过pandas中转后写回二进制

如果必须用pandas处理数据后再保存,需要先将DataFrame转回numpy结构化数组,再写入二进制:

import numpy as np
import pandas as pd

bufType = np.dtype(
    [
        ('datetime', 'double'),
        ('humidity', 'single'),
        ('temperature', 'single'),
        ('extra_param', 'single')
    ]
)

path = r'C:\Users\Егор\Desktop\ЛК-44\pool-исходник\ccc.dat'
data = np.fromfile(path, dtype=bufType)

df = pd.DataFrame(data)
# 此处可对df进行数据处理操作

# 将DataFrame转回numpy结构化数组并保存
df.to_records(index=False).tofile('my_file.dat')

补充说明

  • 若要验证保存的文件是否和原文件一致,可使用文件对比工具(如WinMerge)检查字节层面的差异。
  • 如果后续需要解析日期时间值(基准为1899年12月30日),可以用pandas的to_datetime转换:
    df['datetime'] = pd.to_datetime(df['datetime'], unit='D', origin='1899-12-30')
    
    注意:若要原样保存二进制,不要修改该字段的数值,否则写回的字节会发生变化。

内容的提问来源于stack exchange,提问作者От А До Я

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:30:12