Python interface to the ecCodes GRIB and BUFR decoder/encoder library for meteorological data processing
—
Core functionality for creating, reading, writing, and managing GRIB/BUFR messages. This module provides the fundamental operations for message lifecycle management, file I/O, format detection, and memory handling.
Read messages from GRIB, BUFR, METAR, and GTS files with format-specific functions or automatic detection.
def codes_new_from_file(fileobj, product_kind, headers_only=False):
"""
Create a new message from file with explicit product type.
Parameters:
- fileobj: File object opened in binary mode
- product_kind (int): Message type (CODES_PRODUCT_GRIB, CODES_PRODUCT_BUFR, etc.)
- headers_only (bool): Read only headers if True
Returns:
int: Message handle ID or None if no more messages
"""
def codes_grib_new_from_file(fileobj, headers_only=False):
"""
Create a new GRIB message from file.
Parameters:
- fileobj: File object opened in binary mode
- headers_only (bool): Read only headers if True
Returns:
int: Message handle ID or None if no more messages
"""
def codes_bufr_new_from_file(fileobj, headers_only=False):
"""
Create a new BUFR message from file.
Parameters:
- fileobj: File object opened in binary mode
- headers_only (bool): Read only headers if True
Returns:
int: Message handle ID or None if no more messages
"""
def codes_any_new_from_file(fileobj, headers_only=False):
"""
Create a new message from file (auto-detect format).
Parameters:
- fileobj: File object opened in binary mode
- headers_only (bool): Read only headers if True
Returns:
int: Message handle ID or None if no more messages
"""
def codes_metar_new_from_file(fileobj, headers_only=False):
"""Create a new METAR message from file."""
def codes_gts_new_from_file(fileobj, headers_only=False):
"""Create a new GTS message from file."""Create new messages from predefined samples or templates.
def codes_new_from_samples(samplename, product_kind):
"""
Create a new message from sample with explicit product type.
Parameters:
- samplename (str): Name of sample template
- product_kind (int): Message type (CODES_PRODUCT_GRIB, CODES_PRODUCT_BUFR, etc.)
Returns:
int: Message handle ID
"""
def codes_grib_new_from_samples(samplename):
"""
Create a new GRIB message from sample.
Parameters:
- samplename (str): Name of sample template
Returns:
int: Message handle ID
"""
def codes_bufr_new_from_samples(samplename):
"""
Create a new BUFR message from sample.
Parameters:
- samplename (str): Name of sample template
Returns:
int: Message handle ID
"""
def codes_any_new_from_samples(samplename):
"""
Create a new message from sample (auto-detect format).
Parameters:
- samplename (str): Name of sample template
Returns:
int: Message handle ID
"""Create messages from existing message data or index entries.
def codes_new_from_message(message):
"""
Create a new message from binary message data.
Parameters:
- message (bytes): Binary message data
Returns:
int: Message handle ID
"""
def codes_new_from_index(indexid):
"""
Create a new message from index entry.
Parameters:
- indexid (int): Index handle ID
Returns:
int: Message handle ID
"""Handle message lifecycle, cloning, and memory management.
def codes_release(msgid):
"""
Release message from memory.
Parameters:
- msgid (int): Message handle ID
"""
def codes_clone(msgid_src, headers_only=False):
"""
Clone/copy a message.
Parameters:
- msgid_src (int): Source message handle ID
- headers_only (bool): Clone only headers if True
Returns:
int: New message handle ID
"""Count messages and handle file-level operations.
def codes_count_in_file(fileobj):
"""
Count total messages in file.
Parameters:
- fileobj: File object opened in binary mode
Returns:
int: Number of messages in file
"""
def codes_write(msgid, fileobj):
"""
Write message to file.
Parameters:
- msgid (int): Message handle ID
- fileobj: File object opened in binary write mode
"""Get message metadata and binary representation.
def codes_get_message_size(msgid):
"""
Get message size in bytes.
Parameters:
- msgid (int): Message handle ID
Returns:
int: Message size in bytes
"""
def codes_get_message_offset(msgid):
"""
Get message offset in file.
Parameters:
- msgid (int): Message handle ID
Returns:
int: Message offset in bytes
"""
def codes_get_message(msgid):
"""
Get message as binary data.
Parameters:
- msgid (int): Message handle ID
Returns:
bytes: Binary message data
"""import eccodes
with open('forecast.grib', 'rb') as f:
while True:
msg = eccodes.codes_grib_new_from_file(f)
if msg is None:
break
# Process message
param = eccodes.codes_get(msg, 'paramId')
level = eccodes.codes_get(msg, 'level')
print(f"Parameter {param} at level {level}")
# Clean up
eccodes.codes_release(msg)import eccodes
# Create from sample template
msg = eccodes.codes_grib_new_from_samples('regular_ll_sfc_grib2')
# Modify message parameters
eccodes.codes_set(msg, 'paramId', 130) # Temperature
eccodes.codes_set(msg, 'level', 850) # 850 hPa level
# Write to file
with open('output.grib', 'wb') as f:
eccodes.codes_write(msg, f)
# Clean up
eccodes.codes_release(msg)import eccodes
with open('mixed_data.dat', 'rb') as f:
while True:
msg = eccodes.codes_any_new_from_file(f)
if msg is None:
break
# Determine format
product_kind = eccodes.codes_get(msg, 'productKind')
if product_kind == eccodes.CODES_PRODUCT_GRIB:
print("Processing GRIB message")
elif product_kind == eccodes.CODES_PRODUCT_BUFR:
print("Processing BUFR message")
eccodes.codes_release(msg)Install with Tessl CLI
npx tessl i tessl/pypi-eccodes