2024-09-27 01:30:01 发布
网友
一个C程序将连续的双精度输出到一个二进制文件中。我想把它们读入Python。我试着用struct.unpack('d',f.read(8))
struct.unpack('d',f.read(8))
编辑: 我用C语言写了一个随机双数
r = drand48(); fwrite((void*)&r, sizeof(double), 1, data);
错误现在已修复,但我无法读取第一个值。总共0.000。。它的读数是3.90798504668055,但其余的都很好。
我认为你确实读对了号码,但被显示屏弄糊涂了。当我从您提供的文件中读取数字时,我得到“3.907985046680551e-14”-这几乎是零,但不完全是零(0.000000000000039以展开形式)。我怀疑你的C代码只是打印的精度比python低。
3.907985046680551e-14
[编辑]我刚刚尝试用C读取文件,得到了相同的结果(虽然精度略低:3.90799e-14)(使用printf(“%g”,val)),所以我认为如果这个值不正确,它发生在写入端,而不是读取端。
首先,你试过pickle吗? 还没有人显示任何Python代码。。。下面是一些用python读取二进制文件的代码:
import Numeric as N import array filename = "tmp.bin" file = open(filename, mode='rb') binvalues = array.array('f') binvalues.read(file, num_lon * num_lat) data = N.array(binvalues, typecode=N.Float) file.close()
其中f指定了单精度、4字节浮点数字。找到每个条目的数据大小并使用它。
对于非二进制数据,可以执行以下简单操作:
tmp=[] for line in open("data.dat"): tmp.append(float(line))
你能详细说明“没用”吗?命令崩溃了吗?数据出了问题吗?到底发生了什么?
如果命令崩溃:
如果数据是错误的:
创建和读取数据的系统是否具有相同的端点?如果一个是big endian,另一个是little endian,则需要在格式字符串中指定endianness转换。
如果两台计算机的端部相同,数据是如何写入文件的,确切地说是?你知道吗?如果这样做了,那么写入文件的值是多少?您得到的不正确值是多少?
我认为你确实读对了号码,但被显示屏弄糊涂了。当我从您提供的文件中读取数字时,我得到“
3.907985046680551e-14
”-这几乎是零,但不完全是零(0.000000000000039以展开形式)。我怀疑你的C代码只是打印的精度比python低。[编辑]我刚刚尝试用C读取文件,得到了相同的结果(虽然精度略低:3.90799e-14)(使用printf(“%g”,val)),所以我认为如果这个值不正确,它发生在写入端,而不是读取端。
首先,你试过pickle吗? 还没有人显示任何Python代码。。。下面是一些用python读取二进制文件的代码:
其中f指定了单精度、4字节浮点数字。找到每个条目的数据大小并使用它。
对于非二进制数据,可以执行以下简单操作:
你能详细说明“没用”吗?命令崩溃了吗?数据出了问题吗?到底发生了什么?
如果命令崩溃:
如果数据是错误的:
创建和读取数据的系统是否具有相同的端点?如果一个是big endian,另一个是little endian,则需要在格式字符串中指定endianness转换。
如果两台计算机的端部相同,数据是如何写入文件的,确切地说是?你知道吗?如果这样做了,那么写入文件的值是多少?您得到的不正确值是多少?
相关问题 更多 >
编程相关推荐