Lesen mehrerer GRIB-Dateien mit Xarray mit der cfgrib-Engine mit Indexdateien an einem benutzerdefinierten SpeicherortPython

Python-Programme
Anonymous
 Lesen mehrerer GRIB-Dateien mit Xarray mit der cfgrib-Engine mit Indexdateien an einem benutzerdefinierten Speicherort

Post by Anonymous »

Ich versuche, mehrere ERA5 GRIB-Dateien mit der xr.mfopen_dataset()-Methode des Python Xarray zu lesen. Meine ERA5-Eingabedateien befinden sich auf einem Server an einem Ort, für den ich nur Leseberechtigung habe. Daher möchte ich die von der cfgrib-Engine generierten Indexdateien in einem lokalen Kostümverzeichnis speichern. Dies funktioniert gut für eine einzelne GRIB-Datei mit dem folgenden Code unten, in dem ich den Indexdateinamen explizit angeben kann.

Code: Select all

import xarray as xr
from pathlib import Path

# define input file
ifile = Path('/soge-home/data/analysis/era5/0.28125x0.28125/hourly/total_precipitation/grb/era5_hourly_total_precipitation_202505.grb')

# create index directory
workdir = Path.cwd()
idx_dir = Path(f'{workdir}/idx_files')
idx_dir.mkdir(exist_ok=True, parents=True)

# read dataset
ds = xr.open_dataset(ifile,
chunks='auto',
engine='cfgrib',
backend_kwargs={
"indexpath": str(idx_dir / ifile.name) + ".{short_hash}.idx",
'time_dims': ('valid_time',)  # use "valid_time" as main time dim
},
).rename({'valid_time': 'time'})  # rename "valid_time" to "time"
Jetzt versuche ich, dieselbe Methode zum Lesen mehrerer GRIB-Dateien mit dem folgenden Code anzuwenden.

Code: Select all

import xarray as xr
from pathlib import Path

# create index directory
workdir = Path.cwd()
idx_dir = Path(f'{workdir}/idx_files')
idx_dir.mkdir(exist_ok=True, parents=True)

# create sorted list of input files
var_dir = Path('/soge-home/data/analysis/era5/0.28125x0.28125/hourly/total_precipitation/grb/')
ifiles = sorted(var_dir.glob(f'*_2025*.grb'))

# read data with custom index files
ds = xr.open_mfdataset(ifiles,
chunks='auto',
engine='cfgrib',
combine='nested',
concat_dim='valid_time',
parallel=True,
backend_kwargs={
'indexpath': str(idx_dir) + "/test.idx",  # custom index file location
'time_dims': ('valid_time',)  # use valid_time as main time dim
},
).rename({'valid_time': 'time'})  # rename valid_time to time
Die Dateien werden von xr.open_mfdataset() problemlos eingelesen, es werden jedoch keine Indexdateien erstellt. Ich erhalte die folgenden Fehlermeldungen:

Code: Select all

Can't read index file '/hn01-home/worc1870/research/python/progs/grb_test/idx_files/test.idx'
Traceback (most recent call last):
File "/hn01-home/worc1870/micromamba/envs/mm313/lib/python3.13/site-packages/cfgrib/messages.py", line 551, in from_indexpath_or_filestream
self = cls.from_indexpath(indexpath)
File "/hn01-home/worc1870/micromamba/envs/mm313/lib/python3.13/site-packages/cfgrib/messages.py", line 430, in from_indexpath
index = pickle.load(file)
EOFError: Ran out of input
Ignoring index file '/hn01-home/worc1870/research/python/progs/grb_test/idx_files/test.idx' incompatible with GRIB file
Ignoring index file '/hn01-home/worc1870/research/python/progs/grb_test/idx_files/test.idx' incompatible with GRIB file
Ignoring index file '/hn01-home/worc1870/research/python/progs/grb_test/idx_files/test.idx' incompatible with GRIB file
Ich habe alles Mögliche ausprobiert, aber es hat nicht funktioniert. Mache ich etwas falsch oder wird das derzeit einfach nicht unterstützt? Alle Vorschläge sind sehr willkommen. Die Indexdateien sind besonders nützlich beim Einlesen größerer Datenmengen.
Verwendet Python 3.13.7, Xarray 2025.10.1 und cfgrib 0.9.15.1.
Vielen Dank,

Sebastian

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post