Python module for reading and writing GRIB (editions 1 and 2) files.
GRIB is the World Meterological Organization standard for distributing gridded data. The module is
a python interface to the GRIB API C library from the European Centre for
Medium-Range Weather Forecasts (ECMWF).
These dependencies are available via the package management system
of most Linux distributions, and on MacOS X using macports. If you build
grib_api yourself as a static library on a 64-bit system you may need
to set CFLAGS
to '-O2 -fPIC'
before running
the configure
script. To use pygrib on Windows, you must
use the Cygwin
environment, since the grib_api library requires a posix environment.
Cygwin installation instructions are available here.
-
from the python interpreter prompt, import the package:
>>> import pygrib
-
open a GRIB file, create a grib message iterator:
>>> grbs = pygrib.open('sampledata/flux.grb')
-
pygrib open instances behave like regular python file objects, with
seek
, tell
, read
,
readline
and close
methods, except that
offsets are measured in grib messages instead of bytes:
>>> grbs.seek(2)
>>> grbs.tell()
2
>>> grb = grbs.read(1)[0] # read returns a list with the next N (N=1 in this case) messages.
>>> grb # printing a grib message object displays summary info
3:Maximum temperature:K (instant):regular_gg:heightAboveGround:level 2 m:fcst time 108-120 hrs:from 200402291200
>>> grbs.tell()
3
-
print an inventory of the file:
>>> grbs.seek(0)
>>> for grb in grbs:
>>> grb
1:Precipitation rate:kg m**-2 s**-1 (avg):regular_gg:surface:level 0:fcst time 108-120 hrs (avg):from 200402291200
2:Surface pressure:Pa (instant):regular_gg:surface:level 0:fcst time 120 hrs:from 200402291200
3:Maximum temperature:K (instant):regular_gg:heightAboveGround:level 2 m:fcst time 108-120 hrs:from 200402291200
4:Minimum temperature:K (instant):regular_gg:heightAboveGround:level 2 m:fcst time 108-120 hrs:from 200402291200
-
find the first grib message with a matching name:
>>> grb = grbs.select(name='Maximum temperature')[0]
-
extract the data values using the 'values' key (grb.keys() will
return a list of the available keys):
# The data is returned as a numpy array, or if missing values or a bitmap
# are present, a numpy masked array. Reduced lat/lon or gaussian grid
# data is automatically expanded to a regular grid. Details of the internal
# representation of the grib data (such as the scanning mode) are handled
# automatically.
>>> maxt = grb.values # same as grb['values']
>>> maxt.shape, maxt.min(), maxt.max()
(94, 192) 223.7 319.9
-
get the latitudes and longitudes of the grid:
>>> lats, lons = grb.latlons()
>>> lats.shape, lats.min(), lats.max(), lons.shape, lons.min(), lons.max()
(94, 192) -88.5419501373 88.5419501373 0.0 358.125
-
get the second grib message:
>>> grb = grbs.message(2) # same as grbs.seek(1); grb=grbs.readline()
>>> grb
2:Surface pressure:Pa (instant):regular_gg:surface:level 0:fcst time 120 hrs:from 200402291200
-
extract data and get lat/lon values for a subset over North
America:
>>> data, lats, lons = grb.data(lat1=20,lat2=70,lon1=220,lon2=320)
>>> data.shape, lats.min(), lats.max(), lons.min(), lons.max()
(26, 53) 21.904439458 69.5216630593 221.25 318.75
-
modify the values associated with existing keys (either via
attribute or dictionary access):
>>> grb['forecastTime'] = 240
>>> grb.dataDate = 20100101
-
get the binary string associated with the coded message:
>>> msg = grb.tostring()
>>> grbs.close() # close the grib file.
-
write the modified message to a new GRIB file:
>>> grbout = open('test.grb','wb')
>>> grbout.write(msg)
>>> grbout.close()
>>> pygrib.open('test.grb').readline()
1:Surface pressure:Pa (instant):regular_gg:surface:level 0:fcst time 240 hrs:from 201001011200
Author:
Jeffrey Whitaker.
Contact:
Jeff
Whitaker
Version:
2.0.0
Copyright:
copyright 2010 by Jeffrey Whitaker.
License:
Permission to use, copy, modify, and distribute this software and
its documentation for any purpose and without fee is hereby
granted, provided that the above copyright notice appear in all
copies and that both that copyright notice and this permission
notice appear in supporting documentation. THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
|
datetime_to_julian(date)
convert python datetime instance to Julian day number. |
|
|
|
fromstring(string)
Create a gribmessage instance from a python bytes object representing
a binary grib message (the reverse of gribmessage.tostring). |
|
|
|
gaulats(nlats)
Returns nlats gaussian latitudes, in degrees, oriented from north to
south. |
|
|
|
|
|
multi_support_off(...)
turn off support for multi-field grib messages |
|
|
|
multi_support_on(...)
turn on support for multi-field grib messages (default) |
|
|
|
reload(grb)
Recreate gribmessage object, updating all the keys to be consistent
with each other. |
|
|
|
setdates(grb)
set fcstimeunits, analDate and validDate attributes using julianDay,
forecastTime and indicatorOfUnitOfTimeRange. |
|
|
|
tolerate_badgrib_off(...)
raise an exception when a missing or malformed key is encountered
(default behavior). |
|
|
|
tolerate_badgrib_on(...)
don't raise an exception when a missing or malformed key is
encountered. |
|
|