当前位置: 首页 > news >正文

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

解析nc文件,并保存为csv文件

  • 写在最前面
  • 解析nc文件(代码汇总放最后面)
    • 读取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

解析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][:].dataprint(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 csvnc = 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]])

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

http://www.lryc.cn/news/161204.html

相关文章:

  • 介绍串行和并行两种通信方式
  • 优化爬虫效率:利用HTTP代理进行并发请求
  • 关于磁盘空间不够,导致报错 springboot内置tomcat相关的临时目录无法创建等问题,如何自定义配置 tomcat 缓存文件路径
  • Android HAL - hidl-gen
  • CGAL 数值类型
  • 建站系列(六)--- 后端开发语言
  • 王道数据结构编程题 查找
  • vue 部分知识点总结
  • 谷粒商城----ES篇
  • Redis3.2.1如何设置远程连接?允许局域网访问
  • 网络原理(二)TCP的可靠传输
  • Chat GPT 使用教学,文字创作、学习
  • Android之 Canvas绘制
  • Vue + Element UI 前端篇(十五):嵌套外部网页
  • Jabbi的Rust学习日记(二)
  • 【杂】环形时钟配色笔记
  • 会话跟踪技术学习笔记(Cookie+Session)+ HTTP学习笔记
  • 分类预测 | MATLAB实现PCA-BiLSTM(主成分双向长短期记忆神经网络)分类预测
  • Yarn 和 npm 的区别
  • 第20章 原子操作实验(iTOP-RK3568开发板驱动开发指南 )
  • Android 开机自启动
  • 01_前端css编写的三种方式
  • 07-垃圾收集算法详解
  • Redis高并发分布式锁实战
  • MybatisPlus分页插件使用
  • Linux指令二【进程,权限,文件】
  • uni-app运行到微信开发者工具-没有打印的情况
  • 由前端接口入门学习后端的controller层
  • HJ71 字符串通配符
  • ffmpeg 开发笔记