[英]Read FORTRAN formatted numbers with Python
我必須讀取一個數據文件,其中包含使用(非常)舊的 FORTRAN 樣式格式化的數字。 該文件的一行如下所示:
4.500000+1 1.894719-3 4.600000+1 8.196721-3 4.700000+1 2.869539-3
該文件(或其中的大部分)以固定寬度格式包含這些數字。 在 Python 中讀取這些數字的問題在於這些數字中沒有E
看看會發生什么:
>>> float('4.50000+1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): 4.50000+1
我可以編寫一個解析器來讀取它,但想知道這是否已經完成。 這是一種舊的 FORTRAN 格式,所以我想也許有人已經弄明白了。 有誰知道圖書館可以讀取這樣的數字?
您可以使用Python 的 Fortran 格式庫,如下所示,
>>> import fortranformat as ff
>>> reader = ff.FortranRecordReader('(6F13.7)')
>>> reader.read(' 4.500000+1 1.894719-3 4.600000+1 8.196721-3 4.700000+1 2.869539-3')
[45.0, 0.001894719, 46.0, 0.008196721, 47.0, 0.002869539]
這個庫已經針對 Intel 的 ifort 9.1 編譯器進行了廣泛的測試,以精確匹配一些奇怪的 FORTRAN 文本 IO。
安裝使用
pip install fortranformat
自從我編寫這個庫以來,我應該聲明一個偏見......
在將數字傳遞給float
之前,您可以使用正則表達式插入“E”。
re.sub(r'(\d)([-+])', r'\1E\2', number)
這應該有效:
In [47]: strs="4.500000+1 1.894719-3 4.600000+1 8.196721-3 4.700000+1 2.869539-3"
In [48]: [float(x.replace("+","e+").replace("-","e-")) for x in strs.split()]
Out[48]: [45.0, 0.001894719, 46.0, 0.008196721, 47.0, 0.002869539]
另一種方法是使用系統命令訪問 AWK:
注意COMMAND
中 " 字符的轉義
import subprocess
COMMAND = "awk 'gsub(/D/,\"E\");{print}' epsc8.out > epsc8E.out"
subprocess.call(COMMAND, shell=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.