Trucs
Truc 1 : Lire le temps d'un fichier netcdf
Pour lire le temps d'un fichier netcdf, il faut d'abord ouvrir le fichier :
fichier_netcdf = netCDF4.Dataset(filename)
où filename représente le chemin vers le fichier netcdf.
Par la suite, nous avons besoin de lire trois choses :
- L'axe temporel :
nctime = fichier_netcdf.variables['time'][:] # get values
- Les unités du temps :
t_unit = fichier_netcdf.variables['time'].units
- Le calendrier :
t_cal = fichier_netcdfvariables['time'].calendar
Il est maintenant possible de transformer l'axe temporel en une série d'objet de type cftime :
tvalue = netCDF4.num2date(nctime,units = t_unit,calendar = t_cal)
Le résultat sera une série d'objet d'objet de type cftime du genre :
cftime.DatetimeProlepticGregorian(2016, 9, 1, 13, 30, 0, 0), cftime.DatetimeProlepticGregorian(2016, 9, 2, 13, 30, 0, 0), ......
Truc 2 : Garder seulement la date dans l'axe temporel
Advenant le fait que votre fichier netcdf contient des moyennes quotidiennes, l'heure associée à chaque pas de temps peut parfois ne pas être importante ou ne pas toujours faire du sens. Il est possible de s'en séparer si la seule chose que vous désirez est la date et non pas l'heure.
Il faut modifier la ligne suivante du truc 1 afin que le résultat de num2date consiste en le format natif de date python de type datetime.
tvalue = netCDF4.num2date(nctime,units = t_unit,calendar = t_cal)
doit devenir
tvalue = netCDF4.num2date(nctime,units = t_unit,calendar = t_cal,only_use_cftime_datetimes=False,only_use_python_datetimes=True)
Par la suite, nous pouvons utiliser la fonction date() pour ne garder que la date :
tvalue_date = [i.date() for i in tvalue]
Le résulat ressemblera à :
[datetime.date(2016, 9, 1), datetime.date(2016, 9, 2), datetime.date(2016, 9, 3), datetime.date(2016, 9, 4), ............]