用python阅读fortran unformatted文件

hat*_*rix 1 python ascii fortran

我有一个fortran程序生成无格式文件,我试图将它们读入Python.

我有源代码所以我知道第一个"块"是一个字符数组,character*1 name(80)依此类推.所以我开始吧

f = open(filename,'rb')
bytes = 80
name = struct.unpack('c'*bytes,f.read(bytes))
Run Code Online (Sandbox Code Playgroud)

并且name是由长度为1的字符串组成的80长度元组; 其中一些内容是十六进制字符串(例如\x00).如何将此变量转换为单个ascii字符串?

M. *_* B. 6

大多数Fortran未格式化的文件将包含额外的字节以指定记录的长度.记录是使用单个Fortran写入语句编写的项目组.通常在每条记录的开头和结尾有4个字节.因此,在另一种语言中,您将需要阅读这些"隐藏"值并跳过它们.在这种情况下,如果您尝试将它们解释为字符串的一部分,则会向字符串添加不正确的值,这可能具有ASCII的特殊值.

Fortran字符串将是固定长度,并在末尾填充空格,ASCII为0x20.我不希望值0x00,除非字符串未初始化或Fortran程序员使用字符串来保存二进制数据.

在这个时代,如果Fortran程序员正在编写一个打算与另一种语言一起使用的无格式/二进制文件,它们可以通过使用Fortran 2003的"stream"IO方法来省略这些额外的字节.