Op 14-11-13 01:53, Sudheer Joseph schreef: > Hi, > I need to write a binary file exactly as written by fortran code > below to be read by another code which is part of a model which is not > advisable to edit.I would like to use python for this purpose as python has > mode flexibility and easy coding methods. > > character(40) :: TITLE="122322242" > integer :: IWI,JWI > real :: XFIN,YFIN,DXIN=0.5,DYIN=0.5,WDAY(6000) > XFIN=0.0,YFIN=-90.0,NREC=1461,DXIN=0.5;DYIN=0.5;IWI=720;JWI=361 > real,allocatable,dimension(:,:,:) :: VAR1_VAL > real,allocatable,dimension(:,:,:) :: VAR2_VAL > > open(11,file=outf,form='UNFORMATTED') > WRITE(11) TITLE > WRITE(11) NX,NY,XFIN,YFIN,DXIN,DYIN,NREC,WDAY > write(*,'(A10,2f10.3)') "START=",VAR1_VAL(1,1,1),VAR2_VAL(1,1,1) > write(*,'(A10,2f10.3)') "END=",VAR1_VAL(nx,ny,nrec),VAR2_VAL(nx,ny,nrec) > do i=1,NREC > WRITE(11) VAR1_VAL(:,:,i),VAR2_VAL(:,:,i) > WRITE(*,'(2I10,f10.3)') NX,NY,WDAY(i) > enddo > > My trial code with Python (data is read from file here) > > from netCDF4 import Dataset as nc > import numpy as np > XFIN=0.0,YFIN=-90.0,NREC=1461,DXIN=0.5;DYIN=0.5 > TITLE="NCMRWF 6HOURLY FORCING MKS" > nf=nc('ncmrwf_uv.nc') > ncv=nf.variables.keys() > IWI=len(nf.variables[ncv[0]]) > JWI=len(nf.variables[ncv[1]]) > WDAY=nf.varlables[ncv[2]][0:NREC] > U=nf.variables[ncv[3]][0:NREC,:,:] > V=nf.variables[ncv[4]][0:NREC,:,:] > bf=open('ncmrwf_uv.bin',"wb") > f.write(TITLE) > f.write(IWI,JWI,XFIN,YFIN,DXIN,DYIN,NREC,WDAY) > for i in np.arange(0,NREC): > f.write(U[i,:,:],V[i,:,:]) > f.close() > > But the issue is that f.write do not allow multiple values( it allows > one > by one so throws an error with above code ) on same write statement > like in the fortran code. experts may please advice if there a solution for > this?
That is not the main issue. The python write only works with bytes or strings, not with floats or ints. So you will have to convert your numbers using struct. So the question is if you know the byte layout fortran uses and if you can replicate it with the struct module. -- Antoon Pardon -- https://mail.python.org/mailman/listinfo/python-list