将NC栅格表示时间维度的数据提取出来的方法

news/2024/10/22 17:08:38

  本文介绍基于Python语言,逐一读取大量.nc格式的多时相栅格文件,导出其中所具有的全部时间信息的方法。

  .ncNetCDF(Network Common Data Form)文件的扩展名,表示一种常用的科学数据存储格式。NetCDF是一种自描述的、可移植的二进制文件格式,用于存储科学和工程领域的大型数据集;由于其自身的特性,.nc数据被广泛应用于气象学、海洋学、地球科学、气候研究、大气科学、地理信息系统等领域。

  首先,明确一下本文的需求。现在有一个文件夹,其中具有大量的.nc格式的栅格文件,如下图所示。

image

  其中,每一个.nc格式的文件都具有多个时相(或者说是多个维度),而不仅仅只是一个时相。我们希望,读取这个文件夹中的全部.nc格式文件,并获取其所表示的每一个时相。

  明确了需求后,我们就可以开始具体的操作。首先,本文所需用到的代码如下。

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 31 20:28:03 2023@author: fkxxgis
"""import os
import netCDF4
from netCDF4 import Datasetdef list_nc_dates(folder_path):nc_dates = []for file_name in os.listdir(folder_path):if file_name.endswith(".nc"):file_path = os.path.join(folder_path, file_name)try:dataset = Dataset(file_path)time_var = dataset.variables["time"]time_values = time_var[:]time_units = time_var.unitstime_calendar = time_var.calendardates = []for value in time_values:date = netCDF4.num2date(value, units=time_units, calendar=time_calendar)dates.append(date.strftime("%Y-%m-%d %H:%M:%S"))nc_dates.append((file_name, dates))except Exception as e:print(f"Error reading file {file_name}: {str(e)}")return nc_datesfolder_path = "F:/Data_Reflectance_Rec/soil_1"
nc_dates = list_nc_dates(folder_path)for nc_file, dates in nc_dates:for date in dates:print(date)

  这段代码整体思路也很明确。

  首先,我们导入所需的模块。在这里,需要导入Pythonos模块,用于处理文件和文件夹路径操作;同时导入netCDF4库,并接着从netCDF4库中导入Dataset类,用于打开和读取.nc文件。在这里,如果需要配置netCDF4库,大家可以参考文章配置h5py、netCDF4库的方法:Anaconda环境。

  接下来,我们定义了一个名为list_nc_dates的函数,接受一个文件夹路径作为参数。在函数中,首先创建一个空列表nc_dates,用于存储每个.nc文件及其对应的日期列表;随后,使用os.listdir()函数遍历文件夹中的所有文件,通过检查文件名是否以.nc结尾来筛选出.nc文件。紧接着,对于筛选出来的.nc文件,使用os.path.join()函数构建其完整路径。

  其次,使用Dataset类打开.nc文件,并将打开的文件对象赋值给dataset变量;随后,获取.nc文件的时间,在本文的.nc数据中,也就是名为time的变量,并将时间变量的值读取到time_values变量中。接下来,分别获取时间变量的单位与时间类型。

  随后,我们创建一个空列表dates,用于存储日期字符串。遍历时间变量的每个值,使用netCDF4.num2date()函数将时间值转换为日期对象。紧接着,将日期对象转换为指定格式的字符串,并将其添加到dates列表中。此外,这里还将.nc文件名和对应的日期列表作为元组添加到nc_dates列表中,方便我们后期对日期的核对。函数的最后,返回包含每个.nc文件及其对应日期的列表。

  在函数外部,我们设置文件夹路径,随后即可调用list_nc_dates函数,将文件夹路径传递给它,并将返回的结果赋值给nc_dates变量。最后,通过循环,打印每个日期即可。

  执行上述代码,即可出现如下图所示的结果(结果很长,就截取一部分)。由于在本文中,每一个.nc格式文件的每一个维度(即每一个时相)都是精确到天的,所以下图天数后的时、分、秒都是00。当然,如果大家的.nc格式文件维度很多,时相打印出来的话也不好完全显示,所以可以考虑将时间信息导出为表格文件等;例如,可以将每一个date都放在DataFrame中,随后导出为.csv文件。

  至此,大功告成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/74702.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

哪种IDE能同时写java和前端代码

在选择IDE(集成开发环境)来同时编写Java和前端代码时,几个主要的选择包括IntelliJ IDEA、Eclipse、和Visual Studio Code。IntelliJ IDEA提供了强大的Java开发支持和广泛的前端开发插件,Eclipse以其插件生态系统著称,可以通过安装相应的插件支持Java和前端开发,而Visual …

2024.10.22总结

byd放三道黑是吧本文于 github 博客同步更新。 今天打两场 byd放三道黑是吧。 第一场: A: CF1261F 将区间拆分为 \([x2^{i},(x+1)2^{i})\) 的形式,发现两个区间中的数两两异或后形成的仍为一个区间,将 A,B 都拆分后区间两两异或会得到 \(O(n^2\log^2n)\) 个区间,取并即为答…

【FMC163】基于VITA57.1标准的双通道3GSPS AD采集、双通道12GSPS DA回放FMC子卡模块(100%国产化)

板卡概述 FMC163是一款基于VITA57.1标准的实现2路14-bit、3GSPS ADC采集功能、2路14-bit 12GSPS DA回放FMC子卡模块。该模块遵循VITA57.1标准,可直接与FPGA载卡配合使用,该板卡支持对6GHz的射频信号进行数字化采样以及信号生成,板内集成了高性能的时钟管理模块,具有极高的收…

玄机蓝队靶场_应急响应_71:实战evtx-文件分析

windows日志排查工具: https://www.cnblogs.com/starrys/p/17129993.htmlwindows日志事件ID,参考文章:https://peterpan.blog.csdn.net/article/details/139887217下载日志分析工具FullEventLogView.exe https://www.nirsoft.net/utils/fulleventlogview-x64.zip 分别打开三个…

MySQL基于gtid同步,新增slave节点

环境说明:当前MySQL集群为一主一从, 新增加 Slave 节点,将架构变更为一主两从,集群已经运行了很长时间,主节点得binlog早就被purged,启动slave得时候会报错,1236、1062等 操作步骤:备份master数据,从节点reset master,导入数据 1.备份主节点数据:在进行任何操作之前,…

多校A层冲刺NOIP2024模拟赛11

又双叒叕垫底了。 rank 11,T1 90,T2 12,T3 5,T4 35。 accdoer上 rank 44,T1 100,T2 0,T3 5,T4 35。 难度难评,T1签,剩下的不可做?死磕T3了,猜一个结论假一个,打完暴力遗憾离场。 好像两个题库都挂了几分,不管了,赛前挂分RP就++。 慢报:5k_sync_closer成功地取得…

Java 中的垃圾收集器有哪些,它们的工作原理是什么?

在 Java 中,垃圾收集(GC)是自动内存管理的核心部分,它帮助开发者免于手动管理内存分配和回收,提升了开发效率和应用性能。Java中的主要垃圾收集器包括Serial GC、Parallel GC、CMS (Concurrent Mark Sweep) GC、G1 (Garbage-First) GC,以及最新的 ZGC (Z Garbage Collect…