程序:
import xarray as xr
import numpy as np
import cftime
# 文件路径
input_file = r'E:\Except-Desktop\DC\CMIP6-download\historical-pp\pp_185001-201412.nc' # 输入文件名
output_file = r'E:\Except-Desktop\DC\CMIP6-download\historical-pp\pp_c1.nc' # 输出文件名
# 定义裁剪时间范围
start_time = cftime.DatetimeNoLeap(1961, 1, 1)
end_time = cftime.DatetimeNoLeap(2014, 12, 31)
# 打开NetCDF文件
ds = xr.open_dataset(input_file)
# 裁剪时间范围
ds_time = ds.sel(time=slice(start_time, end_time))
# 保存裁剪后的数据到新文件
ds_time.to_netcdf(output_file)
print(f"数据已裁剪并保存至 {output_file}")
输出:
Warning (from warnings module):
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\conventions.py", line 204
var = coder.decode(var, name=name)
SerializationWarning: variable 'pp' has multiple fill values {np.float32(1e+20), np.float64(1e+20)} defined, decoding all values to NaN.
Traceback (most recent call last):
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\DC-run\8.27程序包\裁剪时间.py", line 23, in <module>
ds_time.to_netcdf(output_file)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\core\dataset.py", line 2029, in to_netcdf
return to_netcdf( # type: ignore[return-value] # mypy cannot resolve the overloads:(
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\backends\api.py", line 1984, in to_netcdf
dump_to_store(
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\backends\api.py", line 2031, in dump_to_store
store.store(variables, attrs, check_encoding, writer, unlimited_dims=unlimited_dims)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\backends\common.py", line 470, in store
variables, attributes = self.encode(variables, attributes)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\backends\common.py", line 653, in encode
variables, attributes = cf_encoder(variables, attributes)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\conventions.py", line 798, in cf_encoder
new_vars[k] = encode_cf_variable(v, name=k)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\conventions.py", line 102, in encode_cf_variable
var = coder.encode(var, name=name)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\coding\times.py", line 1362, in encode
variable.data.dtype, np.datetime64
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\core\variable.py", line 436, in data
duck_array = self._data.get_duck_array()
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\core\indexing.py", line 843, in get_duck_array
self._ensure_cached()
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\core\indexing.py", line 840, in _ensure_cached
self.array = as_indexable(self.array.get_duck_array())
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\core\indexing.py", line 797, in get_duck_array
return self.array.get_duck_array()
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\coding\common.py", line 80, in get_duck_array
return self.func(self.array.get_duck_array())
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\core\indexing.py", line 652, in get_duck_array
array = self.array[self.key]
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\backends\netCDF4_.py", line 108, in __getitem__
return indexing.explicit_indexing_adapter(
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\core\indexing.py", line 1021, in explicit_indexing_adapter
result = raw_indexing_method(raw_key.tuple)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python313\Lib\site-packages\xarray\backends\netCDF4_.py", line 121, in _getitem
array = getitem(original_array, key)
File "src\\netCDF4\\_netCDF4.pyx", line 5079, in netCDF4._netCDF4.Variable.__getitem__
File "src\\netCDF4\\_netCDF4.pyx", line 6028, in netCDF4._netCDF4.Variable._get
numpy._core._exceptions._ArrayMemoryError: Unable to allocate 4.45 GiB for an array with shape (648, 15, 384, 320) and data type float32
Raised while encoding variable 'pp' with value <xarray.Variable (time: 648, lev: 15, nlat: 384, nlon: 320)> Size: 5GB
[1194393600 values with dtype=float32]
Attributes: (12/20)
cell_measures: area: areacello volume: volcello
cell_methods: area: mean where sea time: mean
comment: photoC_TOT
description: total primary (organic carbon) production by phytoplankton
frequency: mon
id: pp
... ...
time_title: Temporal mean
title: Primary Carbon Production by Phytoplankton
type: real
units: mol m-3 s-1
variable_id: pp
coordinates: time lev lat lon