Python script to convert bin to txt and back
This commit is contained in:
parent
f68c179038
commit
1ecb4bbe70
70
scripts/convert_bin
Executable file
70
scripts/convert_bin
Executable file
@ -0,0 +1,70 @@
|
||||
#!/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()
|
||||
|
Loading…
Reference in New Issue
Block a user