Python interface to the ecCodes GRIB and BUFR decoder/encoder library for meteorological data processing
—
Object-oriented interface providing Pythonic access to GRIB/BUFR data with automatic memory management, numpy integration, and iterator patterns for efficient data processing.
Object-oriented message interface with dictionary-like access.
class Message:
"""
High-level message interface with automatic memory management.
"""
def __getitem__(self, key):
"""Get message key value."""
def __setitem__(self, key, value):
"""Set message key value."""
def keys(self):
"""Get all available keys."""
@property
def data(self):
"""Get data values as numpy array."""
@property
def shape(self):
"""Get data shape."""
class GRIBMessage(Message):
"""GRIB-specific message interface."""
class BUFRMessage(Message):
"""BUFR-specific message interface."""Iterator classes for reading messages from files and streams.
class FileReader:
"""
Iterator for reading messages from files.
Parameters:
- filename (str): Path to GRIB/BUFR file
- product_kind (int, optional): Message type filter
"""
def __init__(self, filename, product_kind=None):
pass
def __iter__(self):
"""Return iterator."""
def __next__(self):
"""Get next message."""
class StreamReader:
"""
Iterator for reading messages from streams.
Parameters:
- stream: File-like object
- product_kind (int, optional): Message type filter
"""
def __init__(self, stream, product_kind=None):
pass
class MemoryReader:
"""
Iterator for reading messages from memory buffers.
Parameters:
- data (bytes): Binary message data
"""
def __init__(self, data):
passfrom eccodes.highlevel import FileReader
import numpy as np
# Read all messages from file
for msg in FileReader('forecast.grib'):
# Access metadata like dictionary
param = msg['paramId']
level = msg['level']
date = msg['dataDate']
# Get data as numpy array
data = msg.data
print(f"Parameter {param}, Level {level}")
print(f"Data shape: {data.shape}")
print(f"Data range: {data.min():.2f} to {data.max():.2f}")
# Automatic memory management - no need to call codes_releasefrom eccodes.highlevel import FileReader
with FileReader('analysis.grib') as reader:
for msg in reader:
# Dictionary-like access
if msg['paramId'] == 130: # Temperature
# Modify message
msg['level'] = 925 # Change level
# Access grid information
grid_shape = msg.shape
ni, nj = msg['Ni'], msg['Nj']
print(f"Grid: {ni}x{nj}, Shape: {grid_shape}")
# Get available keys
available_keys = list(msg.keys())
print(f"Available keys: {len(available_keys)}")Install with Tessl CLI
npx tessl i tessl/pypi-eccodes