我目前正在尝试利用Python中的meteocean-api来下载和使用NORA3数据。这在后台使用 nco 包来处理文件。我下载了它及其所有依赖项(包括 nco),只需使用:
conda install -c conda-forge metocean-api
这给我的计算机带来了很多麻烦,包括需要将 sqlite3 DLL 重新包含回正确的位置,但最终一切都开始工作再次。现在我试图获取一个简单的数据块来开始分析,但我不断遇到错误:
*** nco.nco.NCOException: (returncode:3221225781) b''
根据我从大量谷歌搜索中了解到的情况,这个确切的返回代码可能意味着我缺少 DLL?但同样,我真的不知道如何找出缺少哪些内容,或者这是否是真正的问题。
下面您可以看到我的代码的复制品(深度简化并更改了数字):
from metocean_api import ts
latitude = 50
longitude = 6
start_string = "2023-01-01 00:00:00+0000"
end_string = "2023-01-02 00:00:00+0000"
type = "wind_sub"
df_ts = ts.TimeSeries(lon=longitude, lat=latitude,
start_time=start_string, end_time=end_string,
product= f'NORA3_{type}')
df_ts.import_data(save_csv=True)
请注意,我使用的是 Windows 11 计算机和 Python 3。我知道这些包都不是为 Windows 使用而构建的,但我想尝试使其工作。
我深入研究了这个问题,它源于 nco本身。错误发生在这里:
nco.ncks(input=infile , output=tempfile, options=opt)
where infile = https://thredds.met.no/thredds/dodsC/nora3_subset_atmos/wind_hourly/arome3kmwind_1hr_202301.nc
tempfile = cache\NORA3_wind_sub_lon6.00000lat50.00000_20230501.nc
and opt = ['-O -v wind_speed, wind_direction, longitude, latitude -d x,3082360.8 -d y,-367476.97']
最终代码到达这里,在nco调用函数中:
proc = subprocess.Popen(
cmd,
stdin=subprocess.DEVNULL,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE,
env=environment,
)
cmd 所在位置:
['C:\Users\ my_file_path_to_the_python_3_environment \Library\bin\ncks', '-O', '-v', '风速,风向,经度,纬度', '-d', 'x,3082360.8', '-d', 'y,-367476.97', '--输出=缓存\NORA3_wind_sub_lon6.00000lat50.00000_20230501.nc', 'https://thredds.met.no/thredds/dodsC/nora3_subset_atmos/wind_hourly/arome3kmwind_1hr_202301.nc']
再次,我对这一切都很陌生(我自己不是计算机科学家或训练有素的程序员),只是想看看我是否可以完成这项工作,因此我们可以包含 NORA3 数据。有谁知道如何修复这个错误?我自己将来如何解决这些模棱两可的错误?
虽然让 NCO 在 Windows 上运行起来可能很棘手,但在调试中采取的步骤是正确的。似乎问题不在于缺少 DLL,而在于 NCO 无法从提供的 URL 读取输入文件。
以下是可以尝试解决此问题的步骤:
-
直接下载文件: NCO 可能无法直接从 OpenDAP URL(以
thredds.met.no/thredds/dodsC/
开头的 URL)读取数据。请尝试先下载所需的文件(在本例中为https://thredds.met.no/thredds/dodsC/nora3_subset_atmos/wind_hourly/arome3kmwind_1hr_202301.nc
)到本地机器,然后将其本地路径作为infile
参数提供给nco.ncks
函数。 -
检查 NCO 设置: 确保的 NCO 安装已正确配置为支持 OpenDAP。可以尝试从命令行运行一个简单的 NCO 命令(使用
ncdump -h
替换为的文件 URL),看看它是否可以从 URL 读取数据。如果它无法读取,可能需要安装并配置 OpenDAP 库(例如,netCDF 库)。 -
使用 Conda 环境: 虽然提到在使用 Conda 环境,但请务必在运行代码的同一环境中安装了 NCO 和所有其依赖项。这将有助于避免与 DLL 或库路径相关的任何冲突。
-
详细的日志记录: 为了进一步调试,请尝试在
nco.ncks
函数调用周围添加详细的日志记录或打印语句。例如,打印cmd
变量以查看执行的确切命令,并打印proc.stderr.read()
以捕获 NCO 执行期间生成的任何错误消息。 -
备用库: 如果使 NCO 在 Windows 上正常工作被证明太困难,可以探索其他用于处理 netCDF 文件的 Python 库,例如
xarray
或netCDF4
。这些库通常比 NCO 更容易在 Windows 上设置和使用。
对于未来的调试,请记住以下几点:
- 隔离问题: 像所做的那样,尝试确定问题的确切来源。
- 检查文档: 查阅所涉及库的文档(NCO、meteocean-api)。
- 搜索特定错误消息: 使用错误消息和库名称在网上搜索解决方案。
- 寻求帮助: 如果遇到困难,请不要犹豫,在论坛或邮件列表(例如 Stack Overflow、GIS Stack Exchange)上寻求帮助。
请记住,即使有经验的程序员也需要处理软件错误和兼容性问题。重要的是要耐心、有条理地进行调试过程。祝你好运!
标签:python,netcdf4,nco From: 78750016