copia el archivo netcdf usando python

Me gustaría hacer una copia del archivo netcdf usando Python.

Hay ejemplos muy buenos de cómo leer o escribir un archivo netcdf, pero quizás también haya una buena manera de hacer la entrada y luego la salida de las variables a otro archivo.

Un buen método simple sería bueno, para obtener las dimensiones y las variables de dimensión en el archivo de salida con el menor costo.

Encontré la respuesta a esta pregunta en python netcdf: haciendo una copia de todas las variables y atributos menos uno , pero necesitaba cambiarlo para que funcione con mi versión de python / netCDF4 (Python 2.7.6 / 1.0.4). Si necesitara agregar o restar elementos, haría las modificaciones apropiadas.

import netCDF4 as nc def create_file_from_source(src_file, trg_file): src = nc.Dataset(src_file) trg = nc.Dataset(trg_file, mode='w') # Create the dimensions of the file for name, dim in src.dimensions.items(): trg.createDimension(name, len(dim) if not dim.isunlimited() else None) # Copy the global attributes trg.setncatts({a:src.getncattr(a) for a in src.ncattrs()}) # Create the variables in the file for name, var in src.variables.items(): trg.createVariable(name, var.dtype, var.dimensions) # Copy the variable attributes trg.variables[name].setncatts({a:var.getncattr(a) for a in var.ncattrs()}) # Copy the variables values (as 'f4' eventually) trg.variables[name][:] = src.variables[name][:] # Save the file trg.close() create_file_from_source('in.nc', 'out.nc') 

Este fragmento ha sido probado.

Si desea usar solo la API netCDF-4 para copiar cualquier archivo netCDF-4, incluso aquellos con variables que usan tipos arbitrarios definidos por el usuario, ese es un problema difícil. El módulo netCDF4 en netcdf4-python.googlecode.com actualmente carece de soporte para tipos compuestos que tienen miembros de longitud variable o tipos de longitud variable de un tipo de base compuesto, por ejemplo.

La utilidad nccopy que está disponible con la distribución netCDF-4 C muestra que es posible copiar un archivo netCDF-4 arbitrario utilizando solo la API C netCDF-4, pero eso se debe a que la API C es totalmente compatible con el modelo de datos netCDF-4. Si limita su objective de copiar archivos netCDF-4 que solo usan tipos planos admitidos por el módulo googlecode, el algoritmo utilizado en nccopy.c debería funcionar bien y debería ser adecuado para una implementación más elegante en Python.

Un proyecto menos ambicioso que sería aún más fácil es un progtwig de Python que copiaría cualquier archivo de “formato clásico” de netCDF, porque el modelo clásico compatible con netCDF-3 no tiene tipos definidos por el usuario ni tipos recursivos. Este progtwig incluso funcionaría para los archivos de modelos clásicos de netCDF-4 que también usan características de rendimiento como compresión y fragmentación.

ver ¿Cómo copio un archivo en python? : un archivo netcdf no es diferente de cualquier otro archivo, por lo que debe ajustarse a sus necesidades

Solo para aclarar lo que quería entonces.

Tuve que modificar alguna variable, pero también quería conservar el archivo original. Entonces, ahora haría esta tarea, ya sea:

  • Cómo hacer una copia del archivo original con un nombre diferente a través de un subproceso o alguna otra forma de cómo copiar archivos fácilmente en Python

  • cree una nueva variable en el archivo original abriendo el archivo en modo de escritura

Sin embargo, Griffith, Russ y otros son reconocidos por su respuesta al problema.