pythonWRF

多个文件读取

2019-04-30  本文已影响1人  榴莲气象

Combining Multiple Files Using the ‘cat’ Method

from __future__ import print_function

from netCDF4 import Dataset
from wrf import getvar, ALL_TIMES

# Creating a simple test list with three timesteps
wrflist = [Dataset("wrfout_d01_2016-10-07_00_00_00"),
           Dataset("wrfout_d01_2016-10-07_01_00_00"),
           Dataset("wrfout_d01_2016-10-07_02_00_00")]

# Extract the 'P' variable for all times
p_cat = getvar(wrflist, "P", timeidx=ALL_TIMES, method="cat")

print(p_cat)
from __future__ import print_function

from glob import glob
from netCDF4 import Dataset as nc

from wrf import getvar, ALL_TIMES, get_cartopy, cartopy_xlim, cartopy_ylim

# Get all of the domain 02 WRF output files
wrf_filenames = glob("wrf_files/wrf_vortex_multi/wrfout_d02_*")
ncfiles = [nc(x) for x in wrf_filenames]

# Use SLP as the example variable and include all times
slp = getvar(ncfiles, "slp", timeidx=ALL_TIMES)

# Get the cartopy mapping object
cart_proj = get_cartopy(slp)
print (cart_proj)
print ("\n")

# Get the array of axes x-limits
xlims = cartopy_xlim(slp)
print (xlims)
print ("\n")

# Get the array of axes y-limits
ylims = cartopy_ylim(slp)
print (ylims)

from netCDF4 import MFDataset

https://towardsdatascience.com/handling-netcdf-files-using-xarray-for-absolute-beginners-111a8ab4463f

https://github.com/Unidata/netcdf4-python/blob/master/examples/writing_netCDF.ipynb

我认为错误非常清楚,但有办法避免它。
https://cloud.tencent.com/developer/ask/184134/answer/289045

1 /您可以使用例如nccopy将NetCDF4中的NetCDF文件转换为经典格式:

nccopy -k classic nc4_file.nc ncclassic_file.nc

2 / xarray有一个类似的方法(称为open_mfdataset),它能够处理NetCDF4文件。快速测试:

import netCDF4 as nc4
test = nc4.MFDataset(['test0.nc','test1.nc'])

这给了我同样的错误(“MFNetCDF4仅适用于...”),与xarray相同,没有任何问题:
import xarray as xr
test = xr.open_mfdataset(['test0.nc', 'test1.nc'])<

Python: How to use MFdataset in netCDF4

Example usage (See netCDF4.MFDataset.__init__ for more details):
:::python
>>> import numpy as np
>>> # create a series of netCDF files with a variable sharing
>>> # the same unlimited dimension.
>>> for nf in range(10):
>>> f = Dataset("mftest%s.nc" % nf,"w",format='NETCDF4_CLASSIC')
>>> f.createDimension("x",None)
>>> x = f.createVariable("x","i",("x",))
>>> x[0:10] = np.arange(nf10,10(nf+1))
>>> f.close()
>>> # now read all those files in at once, in one Dataset.
>>> f = MFDataset("mftest*nc")
>>> print f.variables["x"][:]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99]
"""
Note that netCDF4.MFDataset can only be used to read, not write, multi-file
datasets.

上一篇 下一篇

猜你喜欢

热点阅读