Writing GRIB to a file target
[1]:
# get input GRIB data
import earthkit.data as ekd
ds = ekd.from_source("sample", "test.grib")
Using to_target() on the data object
We use to_target() to write the GRIB fieldlist/field into a file. The encoder is automatically guessed from the input data.
[2]:
# writing a field
ds[0].to_target("file", "_res_t.grib")
# writing a whole fieldlist
ds.to_target("file", "_res_t.grib")
[3]:
# setting GRIB keys for the output
ds.to_target("file", "_res_t.grib", metadata={"date": 20250108}, bitsPerValue=8)
ekd.from_source("file", "_res_t.grib").ls(extra_keys=["bitsPerValue"])
[3]:
| centre | shortName | typeOfLevel | level | dataDate | dataTime | stepRange | dataType | number | gridType | bitsPerValue | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | ecmf | 2t | surface | 0 | 20250108 | 1200 | 0 | an | 0 | regular_ll | 8 |
| 1 | ecmf | msl | surface | 0 | 20250108 | 1200 | 0 | an | 0 | regular_ll | 8 |
[4]:
# data can be appended to the output file
ds[1].to_target("file", "_res_t.grib")
ds[0].to_target("file", "_res_t.grib", append=True)
ekd.from_source("file", "_res_t.grib").ls(extra_keys=["bitsPerValue"])
[4]:
| centre | shortName | typeOfLevel | level | dataDate | dataTime | stepRange | dataType | number | gridType | bitsPerValue | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | ecmf | msl | surface | 0 | 20200513 | 1200 | 0 | an | 0 | regular_ll | 16 |
| 1 | ecmf | 2t | surface | 0 | 20200513 | 1200 | 0 | an | 0 | regular_ll | 16 |
Using a Target object
We can create a target object with get_target() and use write() to write/add data to it.
[5]:
# basic usage
target = ekd.create_target("file", "_res_t.grib")
target.write(ds)
target.close()
# can be used as a context manager, no need to call close() in the end
with ekd.create_target("file", "_res_t.grib") as target:
target.write(ds)
# a filedlist can be written field by field into the target
with ekd.create_target("file", "_res_t.grib") as target:
for f in ds:
target.write(f)
Using encoders
These calls are equivalent.
[6]:
# setting metadata and other GRIB keys for the output
ds.to_target("file", "_res_t.grib", metadata={"date": 20250108}, bitsPerValue=8)
# explicitly specifying the encoder
ds.to_target("file", "_res_t.grib", encoder="grib", metadata={"date": 20250108}, bitsPerValue=8)
# using an encoder object
encoder = ekd.create_encoder("grib", metadata={"date": 20250108})
ds.to_target("file", "_res_t.grib", encoder=encoder, bitsPerValue=8)
The same can be done with a target object.
[7]:
encoder = ekd.create_encoder("grib", metadata={"date": 20250108})
with ekd.create_target("file", "_res_t.grib") as target:
target.write(ds, encoder=encoder, bitsPerValue=8)