from netCDF4 import Dataset
import numpy as np
 
def ncattrs(ncObj):
    attrDic={}
    attrs=ncObj.ncattrs()
    if isinstance(ncObj.dimensions,tuple):
        attrDic["dimensions"]=ncObj.dimensions
    elif ncObj.dimensions is not None:
        dimensions={}
        for k,v in ncObj.dimensions.items():
            dimensions[k]={}
            size=v.size
            name=v.name
            dimensions[k]["size"]=size
            dimensions[k]["name"]=name
        attrDic["dimensions"]=dimensions

    for attr in attrs:
        name=attr.encode('utf-8')
        value=ncObj.getncattr(name)
        if isinstance(value,unicode):
            attrDic[name]=value.encode('utf-8')
        elif value.tolist is not None:
            attrDic[name]=value.tolist()
        else:
            attrDic[name]=value
    return attrDic
    
def readFile(fileName):
    ds=Dataset(fileName)
    fileInfo=ncattrs(ds)
    fileInfo["variables"]={}
    for k,v in ds.variables.items():
        name=k.encode('utf-8')
        val=ncattrs(v)
        val["shape"]=v.shape
        val["dtype"]=v.dtype.name
        fileInfo['variables'][name]=val
    ds.close()
    return fileInfo

def readVariable(fileName,varName):
    ds=Dataset(fileName)
    arr=ds.variables[varName]
    binFileName=fileName+"-"+varName+".bin"
    arr=np.array(arr)
    arr.tofile(binFileName)
    ds.close()
    return binFileName