Python interface to the ecCodes GRIB and BUFR decoder/encoder library for meteorological data processing
—
Efficient indexing system for fast querying and filtering of large meteorological datasets. Supports multi-key indexes, complex queries, and high-performance access to message collections.
Create indexes for fast message lookup and filtering.
def codes_index_new_from_file(filename, keys):
"""
Create index from file.
Parameters:
- filename (str): Path to GRIB/BUFR file
- keys (list[str]): List of keys to index on
Returns:
int: Index handle ID
"""
def codes_index_add_file(indexid, filename):
"""
Add file to existing index.
Parameters:
- indexid (int): Index handle ID
- filename (str): Path to additional file
"""
def codes_index_release(indexid):
"""
Release index from memory.
Parameters:
- indexid (int): Index handle ID
"""Query and filter messages using index.
def codes_index_select(indexid, key, value):
"""
Select messages by key value.
Parameters:
- indexid (int): Index handle ID
- key (str): Key name to filter on
- value: Value to match
Returns:
int: Number of matching messages
"""
def codes_index_get(indexid, key):
"""
Get unique values for key.
Parameters:
- indexid (int): Index handle ID
- key (str): Key name
Returns:
list: Unique values for the key
"""
def codes_index_get_size(indexid, key):
"""
Get number of unique values for key.
Parameters:
- indexid (int): Index handle ID
- key (str): Key name
Returns:
int: Number of unique values
"""Retrieve messages from index queries.
def codes_new_from_index(indexid):
"""
Create message from current index selection.
Parameters:
- indexid (int): Index handle ID
Returns:
int: Message handle ID or None if no more messages
"""import eccodes
# Create index on multiple keys
index = eccodes.codes_index_new_from_file(
'forecast.grib',
['paramId', 'level', 'dataDate']
)
# Get available values for each key
params = eccodes.codes_index_get(index, 'paramId')
levels = eccodes.codes_index_get(index, 'level')
dates = eccodes.codes_index_get(index, 'dataDate')
print(f"Parameters: {params}")
print(f"Levels: {levels}")
print(f"Dates: {dates}")
# Select specific data
eccodes.codes_index_select(index, 'paramId', 130) # Temperature
eccodes.codes_index_select(index, 'level', 850) # 850 hPa
# Iterate through matching messages
while True:
msg = eccodes.codes_new_from_index(index)
if msg is None:
break
date = eccodes.codes_get(msg, 'dataDate')
time = eccodes.codes_get(msg, 'dataTime')
print(f"Temperature at 850 hPa: {date} {time:04d}Z")
eccodes.codes_release(msg)
eccodes.codes_index_release(index)Install with Tessl CLI
npx tessl i tessl/pypi-eccodes