![](/img/trans.png)
[英]How to save escape sequences to a file in python without double backslashes?
[英]How to save double to file in python?
假設我需要保存一個矩陣(每行對應一行),以后可以從fortran加載。 我應該選擇哪種方法? 將所有內容轉換為字符串是唯一的方法嗎?
您也可以將它們保存為二進制格式。 請參閱struct
standard模塊的文檔,它有一個用於將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
等)保存雙打。 決定哪一個更好取決於。
我會選擇明文解決方案,因為這意味着文件易於閱讀,而且您不必混淆不同類型的細節(字節順序,默認雙倍大小)。
但是,有些情況下二進制文件更好(例如,如果你有一個非常重要的雙精度列表,空間很重要,或者你更容易解析它而你需要優化) - 但這可能不是你的情況。
您可以使用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]]
如果易讀性和易用性很重要(並且文件大小合理),Fortran可以輕松地解析一個簡單的數字數組,至少如果它事先知道矩陣的大小(使用READ(FILE_ID,'2(F)) '), 我認為):
1.234 5.6789e4
3.1415 9.265358978
42 ...
Python代碼中的兩個嵌套for循環可以輕松地以此形式編寫矩陣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.