我有一个fortran程序会生成未格式化的文件,并且正在尝试将它们读入Python。
我有源代码,因此我知道第一个“块”是的字符数组,character*1 name(80)依此类推。所以我开始
character*1 name(80)
f = open(filename,'rb') bytes = 80 name = struct.unpack('c'*bytes,f.read(bytes))
并且name是一个80长度的元组,由长度为1的字符串组成;其中一些内容是十六进制字符串(例如\x00)。如何将这个变量转换为单个ascii字符串?
name
\x00
大多数Fortran未格式化文件将包含额外的字节来指定记录的长度。记录是用单个Fortran写语句写的一组项目。每个记录的开始和结束通常为4个字节。因此,使用另一种语言,您将要读取这些“隐藏”值并跳过它们。在这种情况下,如果您尝试将它们解释为字符串的一部分,则会在字符串中添加错误的值,该值可能具有ASCII的特殊值。
Fortran字符串将是固定长度,并在末尾用空格填充,ASCII中的空格为0x20。除非未初始化字符串或Fortran程序员使用字符串保存二进制数据,否则我不会期望值0x00。
在这个时代,如果Fortran程序员正在编写要与另一种语言一起使用的未格式化/二进制文件,则可以通过使用Fortran 2003的“流” IO方法来忽略这些多余的字节。