Nstrophy/scripts/convert_bin

71 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python3
import sys
import struct
import re
def print_usage():
print("usage: convert_bin <bin2txt|txt2bin> <input_file> <output_file> <K>")
if len(sys.argv)!=5:
print_usage()
sys.exit(-1)
if sys.argv[1]=="bin2txt":
direction="bin2txt"
elif sys.argv[1]=="txt2bin":
direction="txt2bin"
else:
print_usage()
sys.exit(-1)
if direction=="txt2bin":
inf=open(sys.argv[2],"r")
out=open(sys.argv[3],"wb")
elif direction=="bin2txt":
inf=open(sys.argv[2],"rb")
out=open(sys.argv[3],"w")
K=int(sys.argv[4])
counter=0
if direction=="txt2bin":
# read
entries={}
for line in inf.readlines():
# remove double spaces
line=re.sub(' *',' ',line)
# remove initial spaces
line=re.sub('^ ','',line)
nums=line.split(" ")
kx=int(nums[0])
ky=int(nums[1])
Re=float(nums[2])
im=float(nums[3])
entries[str(kx)+","+str(ky)]=[Re,im]
# write
for kx in range(0,K+1):
for ky in range(-K,K+1):
# ignore kx<0
if (kx>0 or (kx==0 and ky>0)):
# print if exists
if str(kx)+","+str(ky) in entries:
out.write(struct.pack('dd',entries[str(kx)+","+str(ky)][0],entries[str(kx)+","+str(ky)][1]))
else:
# otherwise 0
out.write(struct.pack('dd',0.,0.))
elif direction=="bin2txt":
for kx in range(0,K+1):
for ky in range(-K,K+1):
# ignore kx<0
if (kx>0 or (kx==0 and ky>0)) :
entry=struct.unpack('dd',inf.read(16))
print(kx,ky,entry[0],entry[1],file=out)
inf.close()
out.close()