{
"cells": [
{
"cell_type": "markdown",
"id": "6094679c-dc47-4822-bae4-150f6b541bd4",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## Writing GRIB to a file target"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "b7db8543-3a37-4eaf-8729-261f46e3ca18",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"test.grib: 0%| | 0.00/1.03k [00:00, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# get input GRIB data\n",
"import earthkit.data as ekd\n",
"ds = ekd.from_source(\"sample\", \"test.grib\")"
]
},
{
"cell_type": "markdown",
"id": "831ff134-cced-4d13-b048-fa7b9efc5007",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"#### Using to_target() on the data object"
]
},
{
"cell_type": "raw",
"id": "b0eb996e-b105-4c03-a944-8fb37d213b44",
"metadata": {
"editable": true,
"raw_mimetype": "text/restructuredtext",
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"We use :func:`to_target` to write the GRIB fieldlist/field into a file. The encoder is automatically guessed from the input data."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "01d115db-17f0-456a-afc5-ea81367d18b5",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"# writing a field\n",
"ds[0].to_target(\"file\", \"_res_t.grib\")\n",
"\n",
"# writing a whole fieldlist\n",
"ds.to_target(\"file\", \"_res_t.grib\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "00bf762d-c937-4967-bf75-30d277c93182",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" centre | \n",
" shortName | \n",
" typeOfLevel | \n",
" level | \n",
" dataDate | \n",
" dataTime | \n",
" stepRange | \n",
" dataType | \n",
" number | \n",
" gridType | \n",
" bitsPerValue | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" ecmf | \n",
" 2t | \n",
" surface | \n",
" 0 | \n",
" 20250108 | \n",
" 1200 | \n",
" 0 | \n",
" an | \n",
" 0 | \n",
" regular_ll | \n",
" 8 | \n",
"
\n",
" \n",
" | 1 | \n",
" ecmf | \n",
" msl | \n",
" surface | \n",
" 0 | \n",
" 20250108 | \n",
" 1200 | \n",
" 0 | \n",
" an | \n",
" 0 | \n",
" regular_ll | \n",
" 8 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" centre shortName typeOfLevel level dataDate dataTime stepRange dataType \\\n",
"0 ecmf 2t surface 0 20250108 1200 0 an \n",
"1 ecmf msl surface 0 20250108 1200 0 an \n",
"\n",
" number gridType bitsPerValue \n",
"0 0 regular_ll 8 \n",
"1 0 regular_ll 8 "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# setting GRIB keys for the output\n",
"ds.to_target(\"file\", \"_res_t.grib\", metadata={\"date\": 20250108}, bitsPerValue=8)\n",
"\n",
"ekd.from_source(\"file\", \"_res_t.grib\").ls(extra_keys=[\"bitsPerValue\"])"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "9002ac52-f9da-45fc-9ef1-0296daa675b8",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" centre | \n",
" shortName | \n",
" typeOfLevel | \n",
" level | \n",
" dataDate | \n",
" dataTime | \n",
" stepRange | \n",
" dataType | \n",
" number | \n",
" gridType | \n",
" bitsPerValue | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" ecmf | \n",
" msl | \n",
" surface | \n",
" 0 | \n",
" 20200513 | \n",
" 1200 | \n",
" 0 | \n",
" an | \n",
" 0 | \n",
" regular_ll | \n",
" 16 | \n",
"
\n",
" \n",
" | 1 | \n",
" ecmf | \n",
" 2t | \n",
" surface | \n",
" 0 | \n",
" 20200513 | \n",
" 1200 | \n",
" 0 | \n",
" an | \n",
" 0 | \n",
" regular_ll | \n",
" 16 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" centre shortName typeOfLevel level dataDate dataTime stepRange dataType \\\n",
"0 ecmf msl surface 0 20200513 1200 0 an \n",
"1 ecmf 2t surface 0 20200513 1200 0 an \n",
"\n",
" number gridType bitsPerValue \n",
"0 0 regular_ll 16 \n",
"1 0 regular_ll 16 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# data can be appended to the output file\n",
"ds[1].to_target(\"file\", \"_res_t.grib\")\n",
"ds[0].to_target(\"file\", \"_res_t.grib\", append=True)\n",
"ekd.from_source(\"file\", \"_res_t.grib\").ls(extra_keys=[\"bitsPerValue\"])"
]
},
{
"cell_type": "markdown",
"id": "211ac929-3464-4165-a2a3-d8fb4903a7e3",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"#### Using a Target object"
]
},
{
"cell_type": "raw",
"id": "c6fbbe17-99c6-49ce-9820-8fbd6391448d",
"metadata": {
"editable": true,
"raw_mimetype": "text/restructuredtext",
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"We can create a target object with :func:`get_target` and use :meth:`write` to write/add data to it."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "47cef925-6caf-4cee-bec0-e4467db510f0",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"# basic usage\n",
"target = ekd.create_target(\"file\", \"_res_t.grib\")\n",
"target.write(ds)\n",
"target.close()\n",
"\n",
"# can be used as a context manager, no need to call close() in the end\n",
"with ekd.create_target(\"file\", \"_res_t.grib\") as target:\n",
" target.write(ds)\n",
"\n",
"# a filedlist can be written field by field into the target\n",
"with ekd.create_target(\"file\", \"_res_t.grib\") as target:\n",
" for f in ds:\n",
" target.write(f)"
]
},
{
"cell_type": "markdown",
"id": "5c4ce913-461a-4d3b-89ae-7feace1157a9",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"#### Using encoders"
]
},
{
"cell_type": "markdown",
"id": "2aa6644d-1c90-4550-a88f-af2ee0d6b909",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"These calls are equivalent."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "a86840f7-4b99-4ab6-911d-60726d771a31",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"# setting metadata and other GRIB keys for the output\n",
"ds.to_target(\"file\", \"_res_t.grib\", metadata={\"date\": 20250108}, bitsPerValue=8)\n",
"\n",
"# explicitly specifying the encoder\n",
"ds.to_target(\"file\", \"_res_t.grib\", encoder=\"grib\", metadata={\"date\": 20250108}, bitsPerValue=8)\n",
"\n",
"# using an encoder object\n",
"encoder = ekd.create_encoder(\"grib\", metadata={\"date\": 20250108})\n",
"ds.to_target(\"file\", \"_res_t.grib\", encoder=encoder, bitsPerValue=8)"
]
},
{
"cell_type": "markdown",
"id": "176b71c1-9830-4f4e-af75-6857467308bb",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"The same can be done with a target object."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "310476ce-9d73-4624-a933-2df468586a23",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"encoder = ekd.create_encoder(\"grib\", metadata={\"date\": 20250108})\n",
"with ekd.create_target(\"file\", \"_res_t.grib\") as target:\n",
" target.write(ds, encoder=encoder, bitsPerValue=8)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "dev",
"language": "python",
"name": "dev"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}