Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用xarray对netcdf进行增量存储_Python_Python 3.x_Python Xarray_Netcdf4 - Fatal编程技术网

Python 使用xarray对netcdf进行增量存储

Python 使用xarray对netcdf进行增量存储,python,python-3.x,python-xarray,netcdf4,Python,Python 3.x,Python Xarray,Netcdf4,我使用PythonXarray创建了3个数据数组和1个数据集 da_test=xr.DataArray(rt,dims=['dtime','lat','lon'],coords={'dtime':tAxis,'lat':Y, “lon”:X},) dau test2=xr.DataArray(rt1,dims=['dtime','lat','lon',],coords={'dtime':tAxis,'lat':Y, “lon”:X},) dau test3=xr.DataArray(rt2,di

我使用PythonXarray创建了3个数据数组和1个数据集

da_test=xr.DataArray(rt,dims=['dtime','lat','lon'],coords={'dtime':tAxis,'lat':Y,
“lon”:X},)
dau test2=xr.DataArray(rt1,dims=['dtime','lat','lon',],coords={'dtime':tAxis,'lat':Y,
“lon”:X},)
dau test3=xr.DataArray(rt2,dims=['dtime','lat','lon',],coords={'dtime':tAxis,'lat':Y,
“lon”:X},)
ds=xr.Dataset({“test”:da_test,“test2”:da_test2,“test3”:da_test3})
现在我尝试将数据集保存到netcdf文件。如果文件存在,我打开数据集,沿“dtime”轴连接当前数据集,并将其存储回netcdf。我已将“dtime”指定为无限制维度,以使其可沿该维度扩展

dsList=[ds]
如果os.path.isfile('./'+outFileName):
diskDS=xr.open_数据集(outFileName,group=“/satGrp”)
dsList.append(diskDS)
finalDS=xr.concat(dsList,dim=“dtime”)
diskDS.close()
其他:
finalDS=ds
#设置压缩和写入nc文件
comp=dict(zlib=True,complevel=5)
encoding={var:finalDS.data_vars}
最终目的是(outFileName,group=“/satGrp”,mode='a',format='NETCDF4',engine='h5netcdf',unlimited_dims=[“dtime”],encoding=encoding)
我试图模拟一个用例,脚本将每半小时运行一次,并用更新的数据集更新netcdf。第一次成功通过并存储数据集。但是,当我下次运行它时,会出现以下错误:

Traceback (most recent call last):
  File "xr.py", line 87, in <module>
    finalDS.to_netcdf(outFileName, group="/satGrp", mode='a', format="NETCDF4", engine='h5netcdf', unlimited_dims=["dtime"], encoding=encoding)
  File "/usr/local/lib/python3.6/dist-packages/xarray/core/dataset.py", line 1384, in to_netcdf
    compute=compute)
  File "/usr/local/lib/python3.6/dist-packages/xarray/backends/api.py", line 886, in to_netcdf
    unlimited_dims=unlimited_dims)
  File "/usr/local/lib/python3.6/dist-packages/xarray/backends/api.py", line 929, in dump_to_store
    unlimited_dims=unlimited_dims)
  File "/usr/local/lib/python3.6/dist-packages/xarray/backends/common.py", line 271, in store
    self.set_dimensions(variables, unlimited_dims=unlimited_dims)
  File "/usr/local/lib/python3.6/dist-packages/xarray/backends/common.py", line 343, in set_dimensions
    "%r (%d != %d)" % (dim, length, existing_dims[dim]))
TypeError: %d format: a number is required, not NoneType
回溯(最近一次呼叫最后一次):
文件“xr.py”,第87行,在
最终目的是(outFileName,group=“/satGrp”,mode='a',format='NETCDF4',engine='h5netcdf',unlimited_dims=[“dtime”],encoding=encoding)
文件“/usr/local/lib/python3.6/dist packages/xarray/core/dataset.py”,第1384行,在to_netcdf中
计算=计算)
文件“/usr/local/lib/python3.6/dist packages/xarray/backends/api.py”,第886行,在to_netcdf中
无限尺寸=无限尺寸)
文件“/usr/local/lib/python3.6/dist packages/xarray/backends/api.py”,第929行,位于dump\u to\u存储区中
无限尺寸=无限尺寸)
文件“/usr/local/lib/python3.6/dist-packages/xarray/backends/common.py”,第271行,存储中
self.set_维度(变量,无限大小=无限大小)
文件“/usr/local/lib/python3.6/dist-packages/xarray/backends/common.py”,第343行,以set\u维度显示
%r(%d!=%d)“%(尺寸、长度、现有尺寸[尺寸])
类型错误:%d格式:需要数字,而不是非非类型
第一次传递中存储的数据集:

<xarray.Dataset>
Dimensions:  (dtime: 1, lat: 30, lon: 20)
Coordinates:
  * dtime    (dtime) datetime64[ns] 2019-09-18T12:06:00.298381
  * lat      (lat) int64 0 1 2 3 4 5 6 7 8 9 ... 20 21 22 23 24 25 26 27 28 29
  * lon      (lon) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Data variables:
    test     (dtime, lat, lon) float64 ...
    test2    (dtime, lat, lon) float64 ...
    test3    (dtime, lat, lon) float64 ...

尺寸:(数据时间:1,横向:30,纵向:20)
协调:
*数据时间日期时间64[ns]2019-09-18T12:06:00.298381
*lat(lat)int64 01 2 3 4 5 6 7 8 9。。。20 21 22 23 24 25 26 27 28 29
*lon(lon)int64 01 2 3 4 5 6 7 8 9 10 11 12 14 16 17 19
数据变量:
测试(dtime、lat、lon)浮动64。。。
测试2(数据时间、纬度、经度)浮点64。。。
测试3(数据时间、纬度、经度)浮动64。。。
内存中当前运行的数据集:

<xarray.Dataset>
Dimensions:  (dtime: 1, lat: 30, lon: 20)
Coordinates:
  * dtime    (dtime) datetime64[ns] 2019-09-18T12:07:10.351870
  * lat      (lat) int64 0 1 2 3 4 5 6 7 8 9 ... 20 21 22 23 24 25 26 27 28 29
  * lon      (lon) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Data variables:
    test     (dtime, lat, lon) float64 47.42 977.8 168.2 ... 685.2 777.5 412.6
    test2    (dtime, lat, lon) float64 105.4 2.173e+03 373.8 ... 1.728e+03 916.9
    test3    (dtime, lat, lon) float64 26.32 542.7 93.36 ... 380.3 431.5 229.0
<xarray.Dataset>
Dimensions:  (dtime: 2, lat: 30, lon: 20)
Coordinates:
  * lat      (lat) int64 0 1 2 3 4 5 6 7 8 9 ... 20 21 22 23 24 25 26 27 28 29
  * lon      (lon) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
  * dtime    (dtime) datetime64[ns] 2019-09-18T12:07:10.351870 2019-09-18T12:06:00.298381
Data variables:
    test     (dtime, lat, lon) float64 47.42 977.8 168.2 ... 318.1 977.0 655.4
    test2    (dtime, lat, lon) float64 105.4 2.173e+03 ... 2.171e+03 1.456e+03
    test3    (dtime, lat, lon) float64 26.32 542.7 93.36 ... 176.6 542.3 363.7

尺寸:(数据时间:1,横向:30,纵向:20)
协调:
*数据时间日期时间64[ns]2019-09-18T12:07:10.351870
*lat(lat)int64 01 2 3 4 5 6 7 8 9。。。20 21 22 23 24 25 26 27 28 29
*lon(lon)int64 01 2 3 4 5 6 7 8 9 10 11 12 14 16 17 19
数据变量:
测试(dtime,lat,lon)浮动64 47.42 977.8 168.2。。。685.2 777.5 412.6
测试2(数据时间、纬度、经度)浮动64 105.4 2.173e+03 373.8。。。1.728e+03916.9
测试3(数据时间、纬度、经度)浮动64 26.32 542.7 93.36。。。380.3 431.5 229.0
内存中连接的数据集:

<xarray.Dataset>
Dimensions:  (dtime: 1, lat: 30, lon: 20)
Coordinates:
  * dtime    (dtime) datetime64[ns] 2019-09-18T12:07:10.351870
  * lat      (lat) int64 0 1 2 3 4 5 6 7 8 9 ... 20 21 22 23 24 25 26 27 28 29
  * lon      (lon) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Data variables:
    test     (dtime, lat, lon) float64 47.42 977.8 168.2 ... 685.2 777.5 412.6
    test2    (dtime, lat, lon) float64 105.4 2.173e+03 373.8 ... 1.728e+03 916.9
    test3    (dtime, lat, lon) float64 26.32 542.7 93.36 ... 380.3 431.5 229.0
<xarray.Dataset>
Dimensions:  (dtime: 2, lat: 30, lon: 20)
Coordinates:
  * lat      (lat) int64 0 1 2 3 4 5 6 7 8 9 ... 20 21 22 23 24 25 26 27 28 29
  * lon      (lon) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
  * dtime    (dtime) datetime64[ns] 2019-09-18T12:07:10.351870 2019-09-18T12:06:00.298381
Data variables:
    test     (dtime, lat, lon) float64 47.42 977.8 168.2 ... 318.1 977.0 655.4
    test2    (dtime, lat, lon) float64 105.4 2.173e+03 ... 2.171e+03 1.456e+03
    test3    (dtime, lat, lon) float64 26.32 542.7 93.36 ... 176.6 542.3 363.7

尺寸:(数据时间:2,横向:30,纵向:20)
协调:
*lat(lat)int64 01 2 3 4 5 6 7 8 9。。。20 21 22 23 24 25 26 27 28 29
*lon(lon)int64 01 2 3 4 5 6 7 8 9 10 11 12 14 16 17 19
*日期时间64[ns]2019-09-18T12:07:10.351870 2019-09-18T12:06:00.298381
数据变量:
测试(dtime,lat,lon)浮动64 47.42 977.8 168.2。。。318.1 977.0 655.4
测试2(数据时间、纬度、经度)浮动64 105.4 2.173e+03。。。2.171e+03 1.456e+03
测试3(数据时间、纬度、经度)浮动64 26.32 542.7 93.36。。。176.6 542.3 363.7
调试时,我在xarray common.py中发现以下内容:

odict_items([('dtime', 2), ('lat', 30), ('lon', 20)])
<h5netcdf.Dimensions: lat=30, lon=20, dtime=None>
odict_项([('dtime',2),('lat',30),('lon',20)])
因此,该检查在现有的_dims['dtime']处失败,而该检查没有得到任何结果

有趣的是,如果我在to_netcdf通话中将模式改为“w”,更新就会顺利进行。但是因为我想在netcdf中有多个组,所以我真的需要使用“a”模式

期待有缓解这一问题的想法