Skip to main content
 首页 » 编程设计

python之用python读取fortran未格式化的文件

2025年05月04日12mq0036

我有一个生成未格式化文件的 Fortran 程序,我正在尝试将它们读入 Python。

我有源代码,所以我知道第一个“ block ”是 character*1 name(80) 等的字符数组。所以我开始了

f = open(filename,'rb') 
bytes = 80 
name = struct.unpack('c'*bytes,f.read(bytes)) 

和name是由长度为1的字符串组成的80长元组;其中一些内容是十六进制字符串(例如,\x00)。我怎样才能将此变量转换为单个 ascii 字符串?

请您参考如下方法:

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

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

在这个时代,如果 Fortran 程序员正在编写一个旨在用于另一种语言的未格式化/二进制文件,他们可以通过使用 Fortran 2003 的“流”IO 方法来省略这些额外的字节。