我有一个opendap thredds链接到一个目录,该目录包含来自特拉华州运营预测系统(DBOFS)的许多海洋模型输出文件。历史数据存储在单独的每小时文件中,甚至包含跨越多个小时的一些文件。我想把这些文件看成是一个很长的时间序列。我在这里遇到了另一个类似问题的问题:Loop through netcdf files and run calculations - Python or R
使用通配符搜索会返回以下错误:
import netCDF4
f = netCDF4.MFDataset('http://opendap.co-ops.nos.noaa.gov/thredds/dodsC/NOAA/DBOFS/MODELS/201401/nos.dbofs.fields.n001.20140130.*.nc')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-3-a44e21cddbe9> in <module>()
----> 1 f = netCDF4.MFDataset('http://opendap.co-ops.nos.noaa.gov/thredds/dodsC/NOAA/DBOFS/MODELS/201401/nos.dbofs.fields.n001.20140130.*.nc')
C:\Users\cenglert\AppData\Local\Enthought\Canopy32\User\lib\site-packages\netCDF4.pyd in netCDF4.MFDataset.__init__ (netCDF4.c:6458)()
ValueError: cannot using file globbing for remote (OPeNDAP) datasets
答案 0 :(得分:3)
就像错误所说的那样,你不能在远程数据集上使用globbing(使用*
作为通配符),但你可以构建数据集URL的python列表并传递它们到MFDataset
。像这样:
import netCDF4
base = 'http://opendap.co-ops.nos.noaa.gov/thredds/dodsC/\
NOAA/DBOFS/MODELS/201401/nos.dbofs.fields.n001.20140130.t%2.2dz.nc'
files = [base % d for d in range(0,24,6)]
nc = netCDF4.MFDataset(files)
print nc.variables['salt']
产生:
<class 'netCDF4._Variable'>
float64 salt('ocean_time', 's_rho', 'eta_rho', 'xi_rho')
long_name: salinity
time: ocean_time
coordinates: lat_rho lon_rho
field: salinity, scalar, series
unlimited dimensions = ('ocean_time',)
current size = (4, 10, 732, 119)
并表明,实际上,{6}和18小时的四个值几乎由MFDataset
汇总。