[Numpy-discussion] example reading binary Fortran file

Gary Ruben gruben at bigpond.net.au
Fri Jan 30 19:00:20 EST 2009


The only time I've done this, I used numpy.fromfile exactly as follows. 
The file had a header followed by a number of records (one float 
followed by 128 complex numbers), requiring separate calls of 
numpy.fromfile to read each part. The only strange part about this was 
that the Fortran code was only supposed to be outputting 3 header fields 
but was adding an extra integer field for some unknown reason. I used a 
binary file viewer to work out the actual format of the file. To get at 
just the complex data in the records, I viewed the data as a recarray. 
Hopefully it's reasonably self-explanatory:

---

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

f = open("field.dat",'rb')

# Read header
a = np.fromfile(f, np.dtype([('f1','<i4'), ('f2','<i4'), ('f3','<f8'),
                              ('f4','<i4')]), count = 1)

# Read data records
b = np.fromfile(f, np.dtype([('f1','<f8'), ('f2','128<c16')]))
bv = b.view(np.recarray)

plt.imshow(np.abs(np.fft.fftshift(np.fft.fft(bv.f2, axis=1), axes=[1])),
            origin='lower', interpolation='nearest', cmap=cm.Oranges)
plt.show()

---

Gary

David Froger wrote:
> Hy,
> 
> My question is about reading Fortran binary file (oh no this question 
> again...)
>
<snip>
> 
> After googling, I read that fopen and npfille was deprecated, and we 
> should use numpy.fromfile and ndarray.tofile, but despite of the 
> documentaion, the cookbook, the mailling list and google, I don't succed 
> in making a simple example. Considering the simple Fortran code below 
> what is the Python script to read the four arrrays? What about if my pc 
> is little endian and the file big endian?




More information about the NumPy-Discussion mailing list