如何在python中将double保存到文件?

如何在python中将double保存到文件?,python,file,double,numbers,Python,File,Double,Numbers,假设我需要保存一个矩阵(每行对应一行),以后可以从fortran加载。我应该选择什么方法?将所有内容转换为字符串是唯一的方法吗?您也可以将它们保存为二进制格式。请参阅struct标准模块的文档,它有一个pack函数,用于将Python对象转换为二进制数据 例如: import struct value = 3.141592654 data = struct.pack('d', value) open('file.ext', 'wb').write(data) 您可以转换矩阵的每个元素并写入文

假设我需要保存一个矩阵(每行对应一行),以后可以从fortran加载。我应该选择什么方法?将所有内容转换为字符串是唯一的方法吗?

您也可以将它们保存为二进制格式。请参阅
struct
标准模块的文档,它有一个
pack
函数,用于将Python对象转换为二进制数据

例如:

import struct

value = 3.141592654
data = struct.pack('d', value)
open('file.ext', 'wb').write(data)
您可以转换矩阵的每个元素并写入文件。Fortran应该能够加载二进制数据。您可以通过将行转换为一个整体来加快此过程,如下所示:

row_data = struct.pack('d' * len(matrix_row), *matrix_row)

请注意,
'd'*len(matrix_row)
是矩阵大小的常数,因此您只需计算一次格式字符串。

我不懂fortran,因此很难判断您在这方面执行解析的容易程度

听起来您的选项要么是以明文形式保存double(意思是将它们“转换”为字符串),要么是以二进制形式保存double(使用
struct
等等)。哪一个更好的决定取决于

我会选择纯文本解决方案,因为这意味着文件将很容易阅读,并且您不必处理不同种类的细节(endianity,默认双尺寸)。
但是,有些情况下二进制更好(例如,如果你有一个非常大的双精度列表,并且空格很重要,或者如果你更容易解析它并且需要优化),但这可能不是你的情况。

你可以使用

文件内容如下所示:

[[2.3452452435, 3.3413400000000002], [4.5, 7.9000000000000004]]

如果易读性和易访问性很重要(并且文件大小合理),Fortran可以轻松解析一个简单的数字数组,至少在它事先知道矩阵大小的情况下(我认为使用READ(file_ID,'2(F)')):


Python代码中的两个嵌套for循环可以轻松地以这种形式编写矩阵。

JSON(JavaScript对象表示法)是一种轻量级数据交换格式。人类阅读和书写是很容易的。机器很容易解析和生成。没有否决权,但不要认为JSON是这里使用的最佳格式。感谢所有回复。对于内部python的使用,我发现pickle是保存数据的最佳方法(我现在已经足够了)。当我需要与fortran连接时,我首先尝试在struct方法上花费更多的时间,如果失败,我将在两个选项之间做出选择:用fortran重写脚本或用fortran解析文本。我怀疑fortran是否支持JSON。对,不幸的是,fortran似乎没有JSON解析器-(我在博客上写了一篇关于这个问题的帖子
[[2.3452452435, 3.3413400000000002], [4.5, 7.9000000000000004]]
1.234  5.6789e4
3.1415 9.265358978
42     ...