nc_to_csv.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:faampy 作者: ncasuk 项目源码 文件源码
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)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号