【可定制、转换时间戳】解析nc文件,并保存为csv文件

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【可定制、转换时间戳】解析nc文件,并保存为csv文件

写在最前面

愿称之为:支持私人订制、非常完美的版本

参考:

解析部分参考:

https://blog.csdn.net/qq_40105563/article/details/119871620

时间换算参考:

https://blog.csdn.net/weixin_51015047/article/details/122571396

{不规则时间}:

https://blog.csdn.net/weixin_43646592/article/details/113427937

写入csv文件参考:

https://blog.csdn.net/Cqh__/article/details/109750908

原文发布时间:2023-09-09 21:06:47

质量分过低,因此进行完善

解析nc文件(代码汇总放最后面)

方便后续代码调整

读取nc文件

不清楚原因,xarray库读取有问题,只能用netCDF4库

获取气象文件中所有变量

解析时间

生成的real_time是一个numpy数组,数组中嵌套的是datetime对象

从1800年开始的,网上部分代码是从1900年开始的

将数据转化为字符串形式

注意:由于这个数据都是每个月1日,所以只用保存年/月格式的数据即可

如果需要保存年/月/日格式的数据,代码可改成:

data0 = str(real_time[i].year)+"/"+str(real_time[i].month)+str(real_time[i].day)

年月日时分秒,以此类推

解析部分代码汇总

import netCDF4
from netCDF4 import Dataset
dir = r'sst.mnmean.nc' # 替换为自己的nc文件
nc = Dataset(dir)
# 获取气象文件中所有变量
vars=nc.variables.keys()
#取出各variable的数据看看,数据格式为numpy数组
for var in vars:
    #读取每个变量的值
    var_data=nc.variables[var][:].data
    print(var,var_data.shape)
time = nc.variables['time']  # 读取时间
real_time = netCDF4.num2date(time,time.units)
print(real_time)
#查看一下time的属性
nc.variables['time']
time = nc.variables['time']  # 读取时间
real_time = netCDF4.num2date(time,time.units)
print(real_time)
print(real_time[0].year,real_time[0].month)
print(str(real_time[0].year)+"/"+str(real_time[0].month))
data = []
for i in range(len(real_time)):
    data0 = str(real_time[i].year)+"/"+str(real_time[i].month)
    data.append(data0)
print(data)

写入csv文件

from netCDF4 import Dataset
import csv
nc = Dataset('sst.mnmean.nc')
print(nc.variables.keys())
lat = nc.variables['lat'][:]
lon = nc.variables['lon'][:]
sst = nc.variables['sst'][:]
time = nc.variables['time']  # 读取时间
# 将时间转化格式:cftime.DatetimeGregorian(1854, 1, 1, 0, 0, 0, 0, has_year_zero=False)
real_time = netCDF4.num2date(time,time.units)
print(real_time)
# 将时间转化格式:['1854/1', '1854/2', '1854/3', '1854/4', '1854/5', '1854/6', '1854/7']
data = []
for i in range(len(real_time)):
    data0 = str(real_time[i].year)+"/"+str(real_time[i].month)
    data.append(data0)
print(data)
# def getDate(num):
#     y = 1801 + num/12
#     m = 1 + num % 12
#     return "%(year)d-%(month)02d"%{'year':y,'month':m}
with open('New_nc v2.0版本.csv', 'a', newline='') as fp:
    writer = csv.writer(fp, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    writer.writerow(['time', 'lat', 'lon', 'sst'])
    # 输入经纬度的维数
    for i in range(len(data)):
        for j in range(len(lat)):
            for k in range(len(lon)):
                if str(sst[i][j][k]) not in '--':
                    writer.writerow([data[i], lat[j], lon[k], sst[ i, j, k]])

完结✿✿ヽ(°▽°)ノ✿

完善

代码解读

解析部分的代码

这段代码用于解读和处理NetCDF格式的气象文件(.nc文件),并提取其中的时间戳信息。以下是代码的解读:

  1. 首先,导入了netCDF4库,并从中导入Dataset类,这是用于处理NetCDF文件的关键类。
  2. dir变量指定了NetCDF文件的路径,即要打开和解析的文件。请根据您的实际文件路径替换它。
  3. 使用Dataset(dir)语句打开了指定路径的NetCDF文件,创建了一个名为nc的Dataset对象,以便后续操作。
  4. 获取气象文件中的所有变量,这是通过vars=nc.variables.keys()语句实现的。这将返回一个包含所有变量名称的列表。
  5. 然后,通过for循环遍历每个变量,读取其值并打印出变量名称以及其数据的形状。这是通过以下代码实现的:
for var in vars:
    var_data = nc.variables[var][:].data
    print(var, var_data.shape)
  1. 接下来,通过nc.variables['time']语句,获取了名为time的时间变量,该变量包含时间戳信息。
  2. 使用netCDF4.num2date()函数,将时间戳数据转换为真实日期和时间。这是通过以下代码实现的:
time = nc.variables['time']
real_time = netCDF4.num2date(time, time.units)
  1. 打印了第一个时间戳的年份和月份,以及将其格式化为字符串的结果。
  2. 创建了一个名为data的空列表,接着使用for循环遍历real_time中的每个日期,并将其格式化为字符串(年/月)后,添加到data列表中。
  3. 最后,打印了整个data列表,其中包含了所有日期信息,以年/月格式表示。

总之,这段代码用于从NetCDF气象文件中提取时间戳信息,并将时间戳转换为易于理解的日期格式。这对于处理和分析气象数据非常有用。请确保替换dir变量为您自己的NetCDF文件路径,以便在您的实际数据上运行代码。

写入csv文件的代码

这段代码用于将从NetCDF文件中提取的气象数据写入CSV文件,以下是代码的解读:

  1. 首先,导入了netCDF4库的Dataset模块以及csv库,这是用于处理NetCDF文件和CSV文件的关键模块。
  2. 使用Dataset模块打开了名为sst.mnmean.nc的NetCDF文件,创建了一个名为nc的Dataset对象,以便后续操作。
  3. 通过nc.variables.keys()语句,获取了NetCDF文件中的所有变量名称,并将其打印出来,这有助于了解文件的内容。
  4. 通过nc.variables['lat'][:]nc.variables['lon'][:]nc.variables['sst'][:],分别读取了名为latlonsst的变量,并将其数据存储在latlonsst变量中。
  5. 使用nc.variables['time']语句,获取了名为time的时间变量,该变量包含时间戳信息。
  6. 使用netCDF4.num2date()函数,将时间戳数据转换为真实日期和时间,并将结果存储在real_time变量中。这部分代码已经在前面的代码解读中详细解释过。
  7. 创建一个空列表data,接着使用for循环遍历real_time中的每个日期,并将其格式化为字符串(年/月)后,添加到data列表中。这部分代码也在前面的代码解读中解释过。
  8. 打开名为New_nc v2.0版本.csv的CSV文件,如果文件不存在则会创建一个新的,使用csv.writer()函数创建一个writer对象,该对象用于写入CSV文件。设置了适当的分隔符、引号字符和引用规则。
  9. 使用writer.writerow(['time', 'lat', 'lon', 'sst']),写入CSV文件的标题行,包括timelatlonsst等列名。
  10. 使用嵌套的for循环,遍历日期、纬度(lat)和经度(lon)的所有组合,将对应的时间、纬度、经度和海表温度(sst)写入CSV文件,前提是sst[i][j][k]不等于’–'。这将产生一个CSV文件,包含了每个时间点、纬度和经度的海表温度数据。

总之,这段代码用于从NetCDF气象文件中提取时间戳和气象数据,然后将数据写入CSV文件,以便进行后续分析和处理。请确保替换文件路径和输出文件名以适应您的实际情况。

目录
相关文章
|
4月前
|
JavaScript API
深入探索fs.WriteStream:Node.js文件写入流的全面解析
深入探索fs.WriteStream:Node.js文件写入流的全面解析
|
12天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
42 2
|
2月前
|
Java
Java“解析时到达文件末尾”解决
在Java编程中,“解析时到达文件末尾”通常指在读取或处理文件时提前遇到了文件结尾,导致程序无法继续读取所需数据。解决方法包括:确保文件路径正确,检查文件是否完整,使用正确的文件读取模式(如文本或二进制),以及确保读取位置正确。合理设置缓冲区大小和循环条件也能避免此类问题。
|
2月前
|
数据处理 开发者 Python
Python 高级编程:深入解析 CSV 文件读取
在Python中,读取CSV文件是数据处理的重要环节。本文介绍了两种高效方法:一是利用pandas库的`read_csv`函数,将CSV文件快速转换为DataFrame对象,便于数据操作;二是通过csv模块的`csv.reader`按行读取CSV内容。此外,还涉及了如何选取特定列、解析日期格式、跳过指定行以及分块读取大文件等高级技巧,帮助开发者更灵活地处理各种CSV文件。参考链接:<https://www.wodianping.com/app/2024-10/48782.html>。
94 6
|
2月前
|
SQL 关系型数据库 MySQL
数据库导入SQL文件:全面解析与操作指南
在数据库管理中,将SQL文件导入数据库是一个常见且重要的操作。无论是迁移数据、恢复备份,还是测试和开发环境搭建,掌握如何正确导入SQL文件都至关重要。本文将详细介绍数据库导入SQL文件的全过程,包括准备工作、操作步骤以及常见问题解决方案,旨在为数据库管理员和开发者提供全面的操作指南。一、准备工作在导
281 0
|
2月前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
344 60
|
18天前
|
存储
文件太大不能拷贝到U盘怎么办?实用解决方案全解析
当我们试图将一个大文件拷贝到U盘时,却突然跳出提示“对于目标文件系统目标文件过大”。这种情况让人感到迷茫,尤其是在急需备份或传输数据的时候。那么,文件太大为什么会无法拷贝到U盘?又该如何解决?本文将详细分析这背后的原因,并提供几个实用的方法,帮助你顺利将文件传输到U盘。
|
2月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
2月前
|
数据处理 Python
Python 高级技巧:深入解析读取 Excel 文件的多种方法
在数据分析中,从 Excel 文件读取数据是常见需求。本文介绍了使用 Python 的三个库:`pandas`、`openpyxl` 和 `xlrd` 来高效处理 Excel 文件的方法。`pandas` 提供了简洁的接口,而 `openpyxl` 和 `xlrd` 则针对不同版本的 Excel 文件格式提供了详细的数据读取和处理功能。此外,还介绍了如何处理复杂格式(如合并单元格)和进行性能优化(如分块读取)。通过这些技巧,可以轻松应对各种 Excel 数据处理任务。
201 16
|
3月前
云解析分享文件
这座建筑结合了现代设计与和谐的自然景观。大面积的玻璃窗让居住者可以充分享受美景和阳光,同时保证了室内充足的自然光线。是体验宁静生活与自然之美的理想之地。图片展现了其优美的自然环境和现代建筑设计的完美融合。
48 6
云解析分享文件

推荐镜像

更多
下一篇
无影云桌面