[Numpy-discussion] using FortranFile to read data from a binary Fortran file
Brennan Williams
brennan.williams at visualreservoir.com
Tue Nov 3 21:18:13 EST 2009
Brennan Williams wrote:
> Hi
>
> I'm using FortranFile on 32 bit XP.
>
> The first record in the file has both 32 bit integer values and double
> precision float values.
>
> I've used readInts('i') to read the data into what I presume is a 32-bit
> integer numpy array.
>
> Items 0 and 1 of the array are the first double precision value.
>
> What's the best way to convert/cast these to get the double precision
> float value?
>
> I assume I need to do some sort of dpval=ival.astype('float64')
>
> so far....
>
> f= FortranFile(fname,endian='<')
> ihdr=f.readInts('i')
>
>
ok I took a closer look at FortranFile and I'm now doing the following.
Note that the first line in the file I'm reading
has two double precision reals/floats followed by 8 32 bit integers.
f=FortranFile(fullfilename,endian='<')
if f:
hdr=f.readString()
print 'hdr=',hdr
print 'len=',len(hdr)
t=struct.unpack('<2d',hdr[0:16])
print 't=',t
i=struct.unpack('<8i',hdr[16:])
print 'i=',i
This gives me...
len=48
t=(0.0,2000.0)
i=(0,0,0,5,0,0,1,213)
which is correct.
So is that the best way to do it, i.e. if I have a line of mixed data
types, use readString and then do my own unpacking?
Brennan
More information about the NumPy-Discussion
mailing list