def process(ds, varnames, outfile=None, include_flag=False):
"""
:param ds: netCDF4.Dataset object
:param varnamess: list of variables ot
:param outfile: csv filename output
:param include_flag: adding flags
"""
if include_flag:
new_varnames = []
for p in varnames:
new_varnames.append(p)
new_varnames.append(p+'_FLAG')
varnames = new_varnames
n = ds.variables['Time'][:].size
dt = [i[0].strftime('%Y-%m-%d %H:%M:%S') for i in num2date(get_mpl_time(ds, 1))]
header =','.join(['utc',] + varnames)
_dtype = [('utc', 'S20'), ]
_fmt = ['%s', ]
for v in varnames:
if v.endswith('_FLAG'):
_dtype.append((v, int))
_fmt.append('%i')
else:
_dtype.append((v, float))
_fmt.append('%.3f')
result = np.recarray((n,), dtype=_dtype)
for v in result.dtype.fields.keys():
if v.endswith('_FLAG'):
result[v] = 3
else:
result[v] = -9999.
result['utc'] = dt
for v in varnames:
if v.lower() in [i.lower() for i in ds.variables.keys()]:
if len(ds.variables[v][:].shape) == 2:
result[v] = ds.variables[v][:, 0]
else:
result[v] = ds.variables[v][:]
if v.endswith('_FLAG'):
result[v][result[v] < 0] = 3
if outfile:
lines = []
for r in result:
lines.append(','.join(_fmt[:]) % tuple(list(r)[:]))
out = open(outfile, 'w')
out.write(header + '\n' + '\n'.join(lines) + '\n')
out.close()
return (result, header)
评论列表
文章目录