假设我需要保存一个矩阵(每行对应一行),以后可以从fortran加载。我应该选择哪种方法?将所有东西都转换成字符串是唯一的方法吗?如何在python中保存double文件?
回答
您也可以用二进制格式保存它们。请参阅struct
标准模块上的文档,它具有用于将Python对象转换为二进制数据的pack
函数。
例如:
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,所以很难判断你在解析的时候很容易做什么。
这听起来像是你的选择是以明文(意思是'将'转换成字符串'')或二进制文件(使用struct
等)来保存双精度。哪一个更好的决定取决于。
我会用纯文本解决方案,因为这意味着文件将易于阅读,并且您不必混淆不同类型的细节(endianity,默认双倍大小)。
但是,有些情况下二进制更好(例如,如果你有一个非常大的双打和空间列表是重要的,或者如果它更容易解析它,你需要优化) - 但这是可能不是你的情况。
您可以使用JSON
import json
matrix = [[2.3452452435, 3.34134], [4.5, 7.9]]
data = json.dumps(matrix)
open('file.ext', 'wb').write(data)
文件的内容将是这样的:
[[2.3452452435, 3.3413400000000002], [4.5, 7.9000000000000004]]
JSON(JavaScript Object Notation)是一个轻量级的数据交换格式,人类很容易读写,机器很容易解析和生成。http://json.org/ – 2009-11-26 15:00:26
没有downvoting,但不认为JSON是最好的格式这里。 – ChristopheD 2009-11-26 15:53:23
如果访问的易读性和易用性是非常重要的(和文件大小是合理的),Fortran语言可以很容易地分析一个简单至少如果它事先知道矩阵的大小(类似于READ(FILE_ID,'2(F)'),我认为):
1.234 5.6789e4
3.1415 9.265358978
42 ...
在您的Python代码中嵌套for循环可以很容易地在这种形式写你的矩阵。
- 1. 保存文件python
- 2. 如何在python中保存url中的.doc文件?
- 3. 如何将配置文件中的密码保存在python中
- 4. 如何在python中将RequestsCookieJar结构保存到文件中
- 5. 在Python中暂时保存文件?
- 6. 在python中保存.dta文件
- 7. PIL:在Python中保存文件
- 8. 如何将jpg文件保存到python文件夹中
- 9. 如何将输出保存到Python中的文本文件中?
- 10. 如何在python中的单个文件上保存两张图?
- 11. 如何将文件保存在Hadoop中使用Python
- 12. 如何在HDF5文件中保存Python dtype('object')?
- 13. Python:如何将文件保存在不同的目录中?
- 14. 如何使用python获取保存在文件中的cookie?
- 15. 如何在文件中保存python工作空间
- 16. 如何让选择在python中保存csv文件的目录?
- 17. 如何在android中的sqlite中保存double数据类型值
- 18. 如何在C++中保存.txt文件?
- 19. 如何在JAR中保存文件?
- 20. 如何在iPhone中保存HTML文件
- 21. 如何在jsoup中保存xhtml文件
- 22. 如何在SQLite中保存pdf文件
- 23. 如何在C#中保存excel文件
- 24. 如何在javascript中保存文件
- 25. 如何在VB.NET中保存文件?
- 26. 如何将文件保存在fastcoloredtextbox中?
- 27. 如何在Unity中保存ADF文件
- 28. 如何在jsp中保存mp3文件?
- 29. 如何在JFileChooser中保存csv文件?
- 30. 如何在vb.net中保存文件
感谢所有回复的人。对于内部python使用,我发现pickle是保存数据的最佳方法(现在对我来说已经足够了)。当我需要与fortran连接时,我首先尝试在struct方法上花费更多时间,如果失败,我会决定在fortran中重写脚本或在fortran中解析文本。我怀疑fortran是否支持JSON。 – hahahaha 2009-11-26 16:32:39
对,不幸的是,FORTRAN似乎没有JSON解析器。 :-( – fviktor 2009-11-27 05:13:34
我已经在我的博客中写过关于此问题的帖子 http://alcworx.blogspot.com/2010/10/transferring-data-from-fortran-to.html – alcworx 2010-10-09 23:04:20