File: nctoh5.py

package info (click to toggle)
pytables 2.3.1-3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 14,624 kB
  • sloc: python: 55,641; xml: 15,737; ansic: 5,805; sh: 460; makefile: 234
file content (50 lines) | stat: -rwxr-xr-x 1,853 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/usr/bin/env python

"""
convert netCDF file to HDF5 using Scientific.IO.NetCDF and PyTables.
Jeff Whitaker <jeffrey.s.whitaker@noaa.gov>

This requires Scientific from 
http://starship.python.net/~hinsen/ScientificPython

"""
from Scientific.IO import NetCDF
import tables, sys
# open netCDF file
ncfile = NetCDF.NetCDFFile(sys.argv[1],mode = "r")
# open h5 file.
h5file = tables.openFile(sys.argv[2], mode = "w")
# loop over variables in netCDF file.
for varname in ncfile.variables.keys():
    var = ncfile.variables[varname]
    vardims = list(var.dimensions)
    vardimsizes = [ncfile.dimensions[vardim] for vardim in vardims]
    # use long_name for title.
    if hasattr(var,'long_name'):
       title = var.long_name
    else: # or, just use some bogus title.
       title = varname + ' array'
    # if variable has unlimited dimension or has rank>1,
    # make it enlargeable (with zlib compression).
    if vardimsizes[0] == None or len(vardimsizes) > 1:
        vardimsizes[0] = 0
        vardata = h5file.createEArray(h5file.root, varname,
        tables.Atom(shape=tuple(vardimsizes),dtype=var.typecode(),),
        title,filters=tables.Filters(complevel=6,complib='zlib'))
    # write data to enlargeable array on record at a time.
    # (so the whole array doesn't have to be kept in memory).
        for n in range(var.shape[0]):
            vardata.append(var[n:n+1])
    # or else, create regular array write data to it all at once.
    else:
        vardata=h5file.createArray(h5file.root,varname,var[:],title)
    # set variable attributes.
    for key,val in var.__dict__.iteritems():
        setattr(vardata.attrs,key,val)
    setattr(vardata.attrs,'dimensions',tuple(vardims))
# set global (file) attributes.
for key,val in ncfile.__dict__.iteritems():
    setattr(h5file.root._v_attrs,key,val)
# Close the file
h5file.close()