In [1]:
%run basics
import glob
import pytz

In [2]:
infilename = qcio.get_filename_dialog(path="../../ACCESS")
xlfilename= infilename.replace('.nc','.xls')

In [3]:
ds_60minutes = qcio.DataStructure()
ncFile = netCDF4.Dataset(infilename)
nRecs = len(ncFile.dimensions["time"])
for attr in ncFile.ncattrs():
    ds_60minutes.globalattributes[attr] = getattr(ncFile,attr)
ds_60minutes.globalattributes["xl_datemode"] = str(0)
ds_60minutes.globalattributes["nc_nrecs"] = str(nRecs)
flag_60minutes = numpy.zeros(nRecs)
item_list=[item for item in ncFile.variables.keys() if "time" in ncFile.variables[item].dimensions]
for label in item_list:
    attr = {}
    for this_attr in ncFile.variables[label].ncattrs():
        attr[this_attr] = getattr(ncFile.variables[label],this_attr)
    var_dim_list = list(ncFile.variables[label].dimensions)
    if len(var_dim_list)==1:
        # only the "time" dimension
        series = ncFile.variables[label][:]
        qcutils.CreateSeries(ds_60minutes,label,series,Flag=flag_60minutes,Attr=attr)
    if len(var_dim_list)==3:
        var_dim_list.remove("time")
        for i in range(0,len(ncFile.dimensions[var_dim_list[0]])):
            for j in range(0,len(ncFile.dimensions[var_dim_list[1]])):
                label_ij = label+'_'+str(i)+str(j)
                series = ncFile.variables[label][:,i,j]
                qcutils.CreateSeries(ds_60minutes,label_ij,series,Flag=flag_60minutes,Attr=attr)
#    if len(var_dim_list)==4:
#        var_dim_list.remove("time")
#        for i in range(0,len(ncFile.dimensions[var_dim_list[0]])):
#            for j in range(0,len(ncFile.dimensions[var_dim_list[1]])):
#                for k in range(0,len(ncFile.dimensions[var_dim_list[2]])):
#                    label_ijk = label+'_'+str(i)+str(j)+str(k)
#                    series = ncFile.variables[label][:,k,i,j]
#                    qcutils.CreateSeries(ds_60minutes,label_ijk,series,Flag=flag_60minutes,Attr=attr)
# do some datetime things
valid_date = ncFile.variables["valid_date"][:]
valid_time = ncFile.variables["valid_time"][:]
#ncFile.close()

In [7]:
# trap valid_date==0 occurrences, these happened in some of the files produced
# in the second batch while the accum_prcp was being sorted out
index = numpy.where(valid_date==0)[0]
# if there are some valid_date==0 then replace them with the correct date
if len(index)!=0:
    for i in index:
        dt = datetime.datetime.strptime(str(int(valid_date[i-1])),"%Y%m%d")
        dt = dt+datetime.timedelta(days=1)
        valid_date[i] = datetime.datetime.strftime(dt,"%Y%m%d")
print "Finished replacing valid_date when 0"
dt_utc_60minutes=[datetime.datetime.strptime(str(int(valid_date[i])*10000+int(valid_time[i])),"%Y%m%d%H%M") for i in range(0,len(valid_date))]
# make utc_dt timezone aware
dt_utc_60minutes=[x.replace(tzinfo=pytz.utc) for x in dt_utc_60minutes]
# get local time from UTC
print "Getting the local time from UTC"
site_name = ds_60minutes.globalattributes["site_name"]
print site_name
site_timezone = c.tz_dict[site_name.lower().replace(" ","").replace("_","")]
print site_timezone
site_tz = pytz.timezone(site_timezone)
print "Got pytz timezone"
dt_loc_60minutes=[x.astimezone(site_tz) for x in dt_utc_60minutes]
print "Finished getting local time"
# NOTE: will have to disable daylight saving at some stage, towers stay on Standard Time
# PRI hopes that the following line will do this ...
dt_loc_60minutes=[x-x.dst() for x in dt_loc_60minutes]
print "Disabled daylight saving"
# make local time timezone naive to match datetimes in OzFluxQC
dt_loc_60minutes=[x.replace(tzinfo=None) for x in dt_loc_60minutes]
print "Made local time timezone naive"
ds_60minutes.series["DateTime"] = {}
ds_60minutes.series["DateTime"]["Data"] = dt_loc_60minutes
print "Added local datetime to data structure"
# get the year, month etc from the datetime
flag_60minutes = numpy.zeros(nRecs,dtype=numpy.int32)
ds_60minutes.series["DateTime"]["Flag"] = flag_60minutes
qcutils.get_xldatefromdatetime(ds_60minutes)
print "Got the xlDateTime"


Finished replacing valid_date when 0
Getting the local time from UTC
Alice Springs Mulga
Australia/Darwin
Got pytz timezone
Finished getting local time
Disabled daylight saving
Made local time timezone naive
Added local datetime to data structure
Got the xlDateTime

In [8]:
qcio.xl_write_series(ds_60minutes, xlfilename, outputlist=None)

In [ ]: