python-2.7 - 如何在 Python 中读取 Fortran 固定宽度格式的文本文件?

标签 python-2.7 fortran ascii

我有一个 Fortran 格式的文本文件(这里是前 3 行):

00033+3251 A   B       C?      6.96    5.480" 358  9.12 F0V    0.00        2.28s  1.00: 2MASS, dJ=1.3
00033+3251 Aa  Ab  Aab S1,E    0.62    0.273m   0  9.28 F0V   11.28 K2     1.68*  0.32* SB 1469
00033+3251 Aab Ac  A   E*      4.26    0.076"   0  9.12 F0V    0.00        2.00s  0.28* 2008MNRAS.383.1506

和文件格式说明:
--------------------------------------------------------------------------------
Bytes Format Units   Label     Explanations
--------------------------------------------------------------------------------
 1- 10  A10   ---     WDS       WDS(J2000)
12- 14  A3    ---     Primary   Designation of the primary
16- 18  A3    ---     Secondary Designation of the secondary component
20- 22  A3    ---     Parent    Designation of the parent (1)
24- 29  A6    ---     Type      Observing technique/status (2)
31- 35  F5.2  d       logP      ? Logarithm (10) of period in days
37- 44  F8.3  ---     Sep       Separation or axis
    45  A1    ---     x_Sep     ['"m] Units of sep. (',",m)
47- 49  I3    deg     PA        Position angle
51- 55  F5.2  mag     Vmag1     V-magnitude of the primary
57- 61  A5    ---     SP1       Spectral type of the primary
63- 67  F5.2  mag     Vmag2     V-magnitude of the secondary
69- 73  A5    ---     SP2       Spectral type of the secondary
75- 79  F5.2  solMass Mass1     Mass of the primary
    80  A1    ---     MCode1    Mass estimation code for primary (3)
82- 86  F5.2  solMass Mass2     Mass of the secondary
    87  A1    ---     MCode2    Mass estimation code for secondary (3)
89-108  A20   ---     Rem       Remark

如何在 Python 中读取我的文件。我只找到了 read_fwf来自 pandas 的函数图书馆。
import pandas as pd

filename = 'systems'
columns = ((0,10),(11,14),(15,18),(19,22),(23,29),(30,35),(36,44),(45,45),(46,49),(50,55),(56,61),(62,67),(68,73),(74,79),(80,80),(81,86),(87,87),(88,108))
data = pd.read_fwf(filename, colspecs = columns, header=None)

这是唯一可能和有效的方法吗?我希望我可以在没有 pandas 的情况下做到这一点.你有什么建议吗?

最佳答案

     columns = ((0,10),(11,14),(15,18),(19,22),(23,29),(30,35),
               (36,44),(44,45),(46,49),(50,55),(56,61),(62,67),
               (68,73),(74,79),(79,80),(81,86),(86,87),(88,108))
     string=file.readline()
     dataline = [ string[c[0]:c[1]] for c in columns ]

注意列索引是 (startbyte-1,endbyte) 以便单个字符字段是
例如:(44,45)

这会给你一个字符串列表。您可能想要转换为浮点数、整数等。这里有很多关于该主题的问题。

关于python-2.7 - 如何在 Python 中读取 Fortran 固定宽度格式的文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23763695/

相关文章:

python - 如何在 Python < 3 中将 UTF-8 编码的文本打印到控制台?

python - 如何创建一个具有一个索引键列和多个值列的字典

fortran - 在单独的文件中构造 Fortran 派生类型

linux - 寻找丢失的共享库

hex - ESC/POS命令选择字符码表

返回与 R 中指定的 Ascii 代码关联的字符

python - Tkinter 图像查看器方法

Python 请求 - 为以后的 url 使用保存 cookie

python - 是否可以让 PySide 的 QUIloader 像 PyQt 的 uic.loadUi 一样工作?

Fortran(重新)分配分配和 gfortran 警告