{
"cells": [
{
"cell_type": "markdown",
"id": "6094679c-dc47-4822-bae4-150f6b541bd4",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## Writing GRIB to file-pattern 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": [
"tuv_pl.grib: 0%| | 0.00/4.22k [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\", \"tuv_pl.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 with a :ref:`targets-file-pattern`to disc. The encoder is automatically guessed from the input data. We use the following output file name pattern:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "fb4dbcc1-487c-48d9-b5fb-6760af2242b5",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"# for each shortName-level combination a separate output file will be created\n",
"out_pattern = \"_res_pattern_{shortName}_{level}.grib\""
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "01d115db-17f0-456a-afc5-ea81367d18b5",
"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",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" ecmf | \n",
" t | \n",
" isobaricInhPa | \n",
" 850 | \n",
" 20180801 | \n",
" 1200 | \n",
" 0 | \n",
" an | \n",
" 0 | \n",
" regular_ll | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" centre shortName typeOfLevel level dataDate dataTime stepRange \\\n",
"0 ecmf t isobaricInhPa 850 20180801 1200 0 \n",
"\n",
" dataType number gridType \n",
"0 an 0 regular_ll "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# writing only temperature fields\n",
"ds.sel(param=\"t\").to_target(\"file-pattern\", out_pattern)\n",
"\n",
"# writing a whole fieldlist\n",
"ds.to_target(\"file-pattern\", out_pattern)\n",
"\n",
"# checking one output file\n",
"ekd.from_source(\"file\", \"_res_pattern_t_850.grib\").ls()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"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",
" t | \n",
" isobaricInhPa | \n",
" 850 | \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 \\\n",
"0 ecmf t isobaricInhPa 850 20250108 1200 0 \n",
"\n",
" dataType number gridType bitsPerValue \n",
"0 an 0 regular_ll 8 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# setting GRIB keys for the output\n",
"ds.to_target(\"file-pattern\", out_pattern, metadata={\"date\": 20250108}, bitsPerValue=8)\n",
"\n",
"# checking one output file\n",
"ekd.from_source(\"file\", \"_res_pattern_t_850.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-pattern\", out_pattern)\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-pattern\", out_pattern) as target:\n",
" target.write(ds)\n",
"\n",
"# a fieldlist can be written field by field into the target\n",
"with ekd.create_target(\"file-pattern\", out_pattern) 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-pattern\", out_pattern, metadata={\"date\": 20250108}, bitsPerValue=8)\n",
"\n",
"# explicitly specifying the encoder\n",
"ds.to_target(\"file-pattern\", out_pattern, 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-pattern\", out_pattern, 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-pattern\", out_pattern) as target:\n",
" target.write(ds, encoder=encoder, bitsPerValue=8)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "dev_ecc",
"language": "python",
"name": "dev_ecc"
},
"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.10.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}