Чтение нескольких файлов GRIB с использованием Xarray с механизмом cfgrib с индексными файлами в произвольном месте.Python

Программы на Python
Ответить
Anonymous
 Чтение нескольких файлов GRIB с использованием Xarray с механизмом cfgrib с индексными файлами в произвольном месте.

Сообщение Anonymous »

Я пытаюсь прочитать несколько файлов ERA5 GRIB, используя метод xr.mfopen_dataset() Python Xarray. Мои входные файлы ERA5 находятся на сервере в месте, для которого у меня есть разрешение только на чтение. Поэтому я хотел бы сохранить индексные файлы, созданные механизмом cfgrib, в локальном каталоге. Это отлично работает для одного файла GRIB, используя следующий код ниже, где я могу явно указать имя индексного файла.

Код: Выделить всё

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"
Теперь я пытаюсь использовать один и тот же метод чтения в нескольких файлах GRIB, используя приведенный ниже код.

Код: Выделить всё

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
Файлы нормально читаются функцией xr.open_mfdataset(), но индексные файлы не создаются. Я получаю следующие сообщения об ошибках:

Код: Выделить всё

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
Я пробовал все, но не получилось. Я делаю что-то не так или на данный момент это просто не поддерживается? Любые предложения очень ценятся. Индексные файлы особенно полезны при чтении больших объемов данных.
Использование Python 3.13.7, Xarray 2025.10.1 и cfgrib 0.9.15.1.
Большое спасибо,

Себастьян

Подробнее здесь: https://stackoverflow.com/questions/798 ... x-files-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»