簡體   English   中英

用 Python 讀取 FORTRAN 格式的數字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM