首页 > 编程问答 >如何调试 NCO/Meteocean-API 代码以获得大气数据?

如何调试 NCO/Meteocean-API 代码以获得大气数据?

时间:2024-08-01 15:51:50浏览次数:14  
标签:python netcdf4 nco

我目前正在尝试利用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 读取输入文件。

以下是可以尝试解决此问题的步骤:

  1. 直接下载文件: 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 函数。

  2. 检查 NCO 设置: 确保的 NCO 安装已正确配置为支持 OpenDAP。可以尝试从命令行运行一个简单的 NCO 命令(使用 ncdump -h 替换为的文件 URL),看看它是否可以从 URL 读取数据。如果它无法读取,可能需要安装并配置 OpenDAP 库(例如,netCDF 库)。

  3. 使用 Conda 环境: 虽然提到在使用 Conda 环境,但请务必在运行代码的同一环境中安装了 NCO 和所有其依赖项。这将有助于避免与 DLL 或库路径相关的任何冲突。

  4. 详细的日志记录: 为了进一步调试,请尝试在 nco.ncks 函数调用周围添加详细的日志记录或打印语句。例如,打印 cmd 变量以查看执行的确切命令,并打印 proc.stderr.read() 以捕获 NCO 执行期间生成的任何错误消息。

  5. 备用库: 如果使 NCO 在 Windows 上正常工作被证明太困难,可以探索其他用于处理 netCDF 文件的 Python 库,例如 xarray netCDF4 。这些库通常比 NCO 更容易在 Windows 上设置和使用。

对于未来的调试,请记住以下几点:

  • 隔离问题: 像所做的那样,尝试确定问题的确切来源。
  • 检查文档: 查阅所涉及库的文档(NCO、meteocean-api)。
  • 搜索特定错误消息: 使用错误消息和库名称在网上搜索解决方案。
  • 寻求帮助: 如果遇到困难,请不要犹豫,在论坛或邮件列表(例如 Stack Overflow、GIS Stack Exchange)上寻求帮助。

请记住,即使有经验的程序员也需要处理软件错误和兼容性问题。重要的是要耐心、有条理地进行调试过程。祝你好运!

标签:python,netcdf4,nco
From: 78750016

相关文章

  • python 音频处理(1)——重采样、音高提取
    采集数据->采样率调整使用torchaudio进行重采样(cpu版)首先导入相关包,既然使用torch作为我们的选项,安装torch环境我就不必多说了,如果你不想用torch可以使用后文提到的另一个库1importtorch2importtorchaudio3fromtorchaudio.transformsimportResample4fromtime......
  • 用于从连接到 LAN 交换机的四个 Arduino 扩展板读取/保存数据的 Python 代码
    我有四个Arduino扩展板连接到LAN交换机。每个人都会发出一条“HelloJane”消息。LAN交换机已连接到我的PC。我需要将每个Arduino的数据/消息保存在PC上的单独文件夹中。请帮助使用Python脚本/代码。我能够看到来自所有四个Arduino的消息,但无法将它们保存到文......
  • 使用 Python 生产者和消费者在 Kubernetes minikube 上设置 Kafka Kraft
    我正在尝试从kubernetes集群外部连接到kubernetesminikubekafkapod。服务器启动没有任何问题,但我无法设法将本地kafka生产者/消费者连接到外部kafkapod。在集群内的kafka服务器映像上,我将bootstrap-server设置为:bin/kafka-topics.sh--create--bootst......
  • python llama_index.indices.list.retrievers 导入错误
    fromllama_indeximportGPTListIndexfromllama_index.indices.list.retrieversimportListIndexLLMRetrieverdocuments=SimpleDirectoryReader('./data').load_data()index=GPTListIndex.from_documents(documents,service_context=service_context)r......
  • 如何使用 python 和 bs4 修复抓取 web 表输出 csv
    请帮帮我,,我想在“td”、“Barcode”和“namaproduk”中获取2个数据,但我得到的数据非常糟糕。我应该修复什么?importcsvimportrequestsfrombs4importBeautifulSoupoutfile=open("dataaa.csv","w",newline='')writer=csv.writer(outfile)page=0whilepag......
  • 基于Django的超市小程序+47822(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、小
    基于django超市小程序摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,超市小程序被用户普遍使用,为方便用户能够可以随时进行超市小程序的数据信息管理,特开发了基于djan......
  • 【优秀python django系统案例】基于python的医院挂号管理系统,角色包括医生、患者、管
    随着信息技术的迅猛发展,传统的医院挂号管理方式面临着效率低下、排队时间长、信息不对称等诸多问题。这些问题不仅影响患者的就医体验,也加重了医院工作人员的负担。在此背景下,基于Python的医院挂号管理系统应运而生。该系统旨在通过信息化手段优化挂号流程,提高管理效率,提升医疗......
  • Python-PLAXIS自动化建模技术与典型岩土工程
    原文链接:Python-PLAXIS自动化建模技术与典型岩土工程https://blog.csdn.net/2301_78164062/article/details/140607885?spm=1001.2014.3001.5501一:Plaxis软件及PlaxisPythonAPI环境搭建1、Plaxis2D\Plaxis3D软件2、面向对象编程语言Python及其开发环境Spyder3、Plaxis输......
  • 在Conda环境中安装python内核
    我刚刚开始使用jupyter笔记本进行我的开发过程。我首先创建一个新的python环境:$condacreate-ntestenv然后激活它:$sourceactivatetestenv并安装python内核模块:$pipinstallipykernel现在,模糊性开始了。我只想专门为我的活动环境创建一个新内核。......
  • C++11 中的 python 海象运算符 (:=) 等效吗?
    最近我在Python中经常使用:=运算符,这样:ifmy_object:=SomeClass.function_that_returns_object():#dosomethingwiththisobjectifitexistsprint(my_object.some_attribute)问题有没有办法在c++11中做到这一点而不使用stdlib?例如......