【问题标题】:How to read a file with fortran formatted numbers into python?如何将带有fortran格式数字的文件读入python?
【发布时间】:2018-04-25 19:46:51
【问题描述】:

我有一个 fortran 格式的 txt 文件,其中包含类似 0.755473D-08 的数字。

如果我使用np.genfromtxt(data,dtype=None),它会显示b'0.755473D-08'。我怎样才能摆脱b?

【问题讨论】:

  • 提问前是否搜索过?
  • 在genfromtxt 中查看stackoverflow.com/questions/5989351/… 与converters 结合。
  • 是的,但我的问题是我无法将fortran格式的数字加载到python中,因为它显示nan,而不是无法替换D。
  • 这似乎是专门关于使用 genfromtxt 的?顺便说一下,您需要将类型设置为字符串并在阅读后进行转换。

标签: python arrays numpy fortran genfromtxt


【解决方案1】:
In [315]: txt = '''0.755473D-08
     ...: 0.755473D-08
     ...: 0.755473D-08'''
In [316]: np.genfromtxt(txt.splitlines())
Out[316]: array([nan, nan, nan])
In [317]: np.genfromtxt(txt.splitlines(),dtype=None)
...
Out[317]: array([b'0.755473D-08', b'0.755473D-08', b'0.755473D-08'], dtype='|S12')

使用字符串replace:

In [319]: txt.replace('D','e')
Out[319]: '0.755473e-08\n0.755473e-08\n0.755473e-08'
In [320]: np.genfromtxt(_.splitlines())
Out[320]: array([7.55473e-09, 7.55473e-09, 7.55473e-09])

这也可以逐行完成(从文件中读取时)。

使用转换器,应用于每个元素(每行的列):

In [326]: np.genfromtxt(txt.splitlines(), converters={0:lambda x:float(x.replace('D','e'))}, encoding=None)
Out[326]: array([7.55473e-09, 7.55473e-09, 7.55473e-09])

它不会尝试在转换器之后进行任何进一步的dtype 转换,因此我必须在转换器中包含float()。

【讨论】:

    猜你喜欢
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多