python替代fortran';类型';记录

python替代fortran';类型';记录,python,data-structures,types,fortran,records,Python,Data Structures,Types,Fortran,Records,我有一些fortran代码要转换成python。所述代码广泛使用“类型”数据结构来描述具有包含多个变量的长标题以及子标题的数据文件,以及存储在五维数组中的实际数据本身;由标头中的其他变量定义的数组的可用维度。在fortran中,我使用一个包含文件来定义我使用的每个程序套件中的类型 在下面的示例中,我将该类型称为“序列”: TYPE SEQUENCE INTEGER NHEADER ! Number of items recorded from file header CHAR

我有一些fortran代码要转换成python。所述代码广泛使用“类型”数据结构来描述具有包含多个变量的长标题以及子标题的数据文件,以及存储在五维数组中的实际数据本身;由标头中的其他变量定义的数组的可用维度。在fortran中,我使用一个包含文件来定义我使用的每个程序套件中的类型

在下面的示例中,我将该类型称为“序列”:

  TYPE SEQUENCE
    INTEGER NHEADER ! Number of items recorded from file header
    CHARACTER*(256) FILE
    CHARACTER*(8) UTC
    CHARACTER*(10) UTDATE
    CHARACTER*(24) OBJ_NAME
    CHARACTER*(24) OBJ_CLASS
    DOUBLE PRECISION MOD_TEMP
    DOUBLE PRECISION MOD_FREQ
    CHARACTER*(1) PMT
    CHARACTER*(6) MOD
    INTEGER FILNUM
    CHARACTER*(24) FILTER
    DOUBLE PRECISION MOD_AMP
    INTEGER HT1
    INTEGER GAIN1
    INTEGER HT2
    INTEGER GAIN2
    DOUBLE PRECISION WP_DELTA
    DOUBLE PRECISION WPA
    DOUBLE PRECISION WPB
    CHARACTER*(MAX_WP) WPSEQ
    DOUBLE PRECISION ROTA
    DOUBLE PRECISION ROTB
    CHARACTER*(MAX_ROT) ROTSEQ
    DOUBLE PRECISION TELESCOPE_PA
    CHARACTER*(7) WAVEFORM
    CHARACTER*(256) SKY_SUB
    CHARACTER*(256) OS_SUB1
    CHARACTER*(256) OS_SUB2
    CHARACTER*(256) NOTES
    INTEGER REPEATS
    INTEGER WP_ROTATIONS
    INTEGER ROTATIONS
    INTEGER INTEGRATIONS
    INTEGER CHANNELS
    INTEGER POINTS
    DOUBLE PRECISION ROT_POS(MAX_ROT)
    DOUBLE PRECISION PRG_MOD_TEMP(MAX_REP,MAX_ROT,MAX_INT)
    CHARACTER*(8) PRG_UTC(MAX_REP,MAX_ROT,MAX_INT)
    DOUBLE PRECISION DAT(MAX_REP,MAX_ROT,MAX_INT,N_CH,MAX_PT)
    DOUBLE PRECISION EXP_TIME
    DOUBLE PRECISION INT_TIME
    DOUBLE PRECISION TOTAL_SEQ_TIME
  END TYPE
在您的情况下,这些文件表示仪器获得的数据,该仪器对每个数据块进行了大量配置。一些配置名义上是等效的,另一些配置测量的是系统的相反状态

如您所见,该结构中有许多不同的数据类型,时间当前存储为字符串,这并不理想。涉及时间的操作在fortran中是一件非常痛苦的事情,能够在python中更轻松地处理这一点是切换的动机之一

在一些程序中,我制作了多个序列的数组。在其他情况下,我需要按照序列.DAT()中的特定维度组合执行数学运算。作为fortran,这通常是通过大量循环和if语句来完成的

我对python还比较陌生,所以在重写大量代码之前,我需要弄清楚最好的方法是什么。或者一年后再做一次

起初我希望pandas会提供答案,但看起来你不能创建超过3维的面板,而且数据帧的大小必须相同。我真的不想从头开始创建自己的类,因为这似乎需要大量的工作来构建可能更容易通过另一种方式实现的功能。我应该使用记录吗?还是别的什么


你推荐什么?就简单性/易启动性和/或功能性而言,有哪些优势?

命名非序列类型
序列
有点。。。奇怪甚至误导。这真的取决于你到底想做什么。你需要二进制兼容性吗?你会从用Fortran编写的文件中读取它吗?为什么不能创建一个具有完全相同字段的类呢?“涉及时间的操作在fortran中是一件非常痛苦的事情,能够在python中更轻松地处理这一点是切换的动机之一。”您是否尝试过使用一些库?也许它被命名为序列是因为数据块在文献中被称为序列。原始代码是用Fortran77编写的,虽然我想我可以用fortran更好地处理日期和时间,但这似乎很麻烦,而且这不是切换的唯一原因。我还想使用其他python包。命名非序列类型
sequence
有点。。。奇怪甚至误导。这真的取决于你到底想做什么。你需要二进制兼容性吗?你会从用Fortran编写的文件中读取它吗?为什么不能创建一个具有完全相同字段的类呢?“涉及时间的操作在fortran中是一件非常痛苦的事情,能够在python中更轻松地处理这一点是切换的动机之一。”您是否尝试过使用一些库?也许它被命名为序列是因为数据块在文献中被称为序列。原始代码是用Fortran77编写的,虽然我想我可以用fortran更好地处理日期和时间,但这似乎很麻烦,而且这不是切换的唯一原因。我还想使用其他python包。