mirror of https://github.com/ecmwf/eccodes.git
84 lines
1.9 KiB
Python
Executable File
84 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import sys
|
|
from gribapi import *
|
|
from array import array
|
|
import random
|
|
import traceback
|
|
import itertools
|
|
|
|
VERBOSE=1
|
|
WRITE=0
|
|
|
|
class Usage(Exception):
|
|
def __init__(self):
|
|
pass
|
|
|
|
def product(*args, **kwds):
|
|
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
|
|
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
|
|
pools = map(tuple, args) * kwds.get('repeat', 1)
|
|
result = [[]]
|
|
for pool in pools:
|
|
result = [x+[y] for x in result for y in pool]
|
|
for prod in result:
|
|
yield tuple(prod)
|
|
|
|
def test():
|
|
# test new from sample
|
|
#grib_release(grib_new_from_samples("GRIB2"))
|
|
|
|
if len(sys.argv) < 2:
|
|
raise Usage
|
|
|
|
infile = sys.argv[1]
|
|
index_keys = ["shortName","level","number","step"]
|
|
|
|
print "indexing..."
|
|
iid = grib_index_new_from_file(infile,index_keys)
|
|
print "end indexing..."
|
|
|
|
index_vals = []
|
|
|
|
for key in index_keys:
|
|
print "%sSize=%d" % (
|
|
key,
|
|
grib_index_get_size(iid,key)
|
|
)
|
|
|
|
key_vals = grib_index_get_string(iid,key)
|
|
print " ".join(key_vals)
|
|
|
|
index_vals.append(key_vals)
|
|
|
|
for prod in product(*index_vals):
|
|
for i in range(len(index_keys)):
|
|
grib_index_select_string(iid,index_keys[i],str(prod[i]))
|
|
|
|
while 1:
|
|
gid = grib_new_from_index(iid)
|
|
if gid is None: break
|
|
print " ".join(["%s=%s" % (key,grib_get_string(gid,key)) for key in index_keys])
|
|
grib_release(gid)
|
|
|
|
grib_index_release(iid)
|
|
|
|
|
|
def main():
|
|
try:
|
|
test()
|
|
except GribInternalError as err:
|
|
if VERBOSE:
|
|
traceback.print_exc(file=sys.stderr)
|
|
else:
|
|
print >>sys.stderr,err.msg
|
|
|
|
return 1
|
|
except Usage:
|
|
print "Usage: %s infile" % sys.argv[0]
|
|
sys.exit(2)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
#print "------------------------------------"
|