Package: pupygrib
PupygribPupygrib (pronouncedpuppy griband short for PUre PYthon GRIB) is a
light-weight pure Python GRIB reader.  It's purpose is to extract data
from GRIB files with as little effort as possible.  The user can then
freely choose how to further process the data (read: pupygrib will
not help you).FeaturesThis project is in the alpha phase, which means that many planned
features are missing and implemented features are not well tested.  It
also means that the API may change in future version.  The implemented
features are:Iterate over and extract the raw fields from GRIB edition 1 messages
in a file.Extract simply packed grid-point data values from GRIB edition 1
messages.Extract the coordinates for these values if they are on a
latitude/longitude grid.The planned features are:Be able to easily identify (filter) the messages.Be able to extract the data values for other packings.Be able to extract the coordinates of other grid types.Support for GRIB edition 2.RequirementsPython3.7 or later (3.7-3.9 are tested).
3.8 or later is recommended for the better typing support.Numpy1.15-1.21 are tested with compatible
Python versions.Installation$pipinstallpupygribUsageTo use pupygrib, you will need a good understanding of the GRIB
format, especially since table lookups are not yet implemented.  ECMWF
provides an overview of GRIBedition 1andedition 2that can be used as references.Iterate over the messages in a GRIB file and extract the time,
coordinates and values:>>>importpupygrib>>>withopen('tests/data/regular_latlon_surface.grib1','rb')asstream:...fori,msginenumerate(pupygrib.read(stream),1):...lons,lats=msg.get_coordinates()...time=msg.get_time()...values=msg.get_values()...print("Message{}:{}{:.3f}{}".format(i,time,values.mean(),lons.shape))...Message1:2008-02-0612:00:00291.585(31,16)Access a section of a GRIB message and print its fields:>>>withopen('tests/data/regular_latlon_surface.grib1','rb')asstream:...msg,=pupygrib.read(stream)>>>sorted(msg.is_.fieldnames)# fieldnames is a set, so we can't trust the order['editionNumber','identifier','totalLength']>>>msg[0].totalLength1100>>>msg.bitmapisNone# the bit-map section is not included in this messageTrueDevelopmentPull requests (against thedevelopbranch) are most welcome!  I do
ask that you add test cases and update the documentation (this README
for now) for any new features.  Run the code through the
auto-formattersblackandisortand make sure that all checks
(coding style, static type check, unit tests, and themanifest) pass without any warnings or errors.  The
easiest way to do this is to install the requirements inrequirements/dev.txtand runnox:$pipinstall-rrequirements/dev.txt$noxLicensePupygrib is being developed byMattias JakobssonatSMHI.  It is released under theGNU General Public License v3or later (GPLv3+).Change log0.9.0Fix reading bitmaps were numberOfUnusedBitsAtEndOfSection3 is zero (!3).Use a declarative setuptools configuration.  This requires
setuptools >= 42.0.8.0Drop support for Python 3.6.Add official support for numpy 1.20 and 1.21.Add basic type annotations for numpy's data structures.Use PEP 585 and 604 in the type annotations.0.7.0Add type annotations to the source code.Revise the Message classes to better support typing.  The sections
of a GRIB message are now rather accessed by name than by index.Add aget_time()method to the message classes.Add official support for Python 3.9.0.6.1Fix unpacking messages with an odd number of 12-bit values.Add official support for NumPy 1.190.6.0Add support for 24 bits per value packing (contributed by @uranix in !1).0.5.1Fix edge cases in zero-padded GRIB files.Add official support for Python 3.8 and NumPy 1.18.0.5.0Added support for grib files with zero-padded messages.0.4.1Disabled universal wheel0.4.0Dropped support for Python 3.5 and older.Added support for 12 bits per value packing.Moved the code repo to gitlab.com for CI facilities.0.3.0Fixed a silent overflow error on unpacking simple grid data (PR #1)Formatted the code with theblack.0.2.0Added a filename attribute toMessageinstances.Added official support for Python 3.6.Changed home page to repo at notabug.org.0.1.0Initial release.