您现在的位置是:亿华云 > 系统运维
盘点两种使用Python读取.nc文件的方法
亿华云2025-10-09 03:36:03【系统运维】4人已围观
简介大家好,我是Python进阶者。前言前几天有个叫【温池】的粉丝在Python钻石交流群里问了一道关于.nc文件读取的问题,如下图所示。.nc文件和常规的文件不太一样,有专门的第三方处理库,netCDF
大家好,盘点我是两种Python进阶者。
前言
前几天有个叫【温池】的使用粉丝在Python钻石交流群里问了一道关于.nc文件读取的问题,如下图所示。读取的方
.nc文件和常规的文件文件不太一样,有专门的盘点第三方处理库,netCDF4,两种需要安装才行。使用
pip install netCDF4如果觉得下载的读取的方慢,可以使用换源的文件方法进行下载:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple netCDF4关于永久换源可以参考这个文章:手把手教你进行pip换源,让你的盘点Python库下载嗖嗖的(系列二)、手把手教你进行pip换源,两种让你的使用Python库下载嗖嗖的。源码下载
一、读取的方nc文件基础知识
nc 全称 netCDF(The 文件Network Common Data Form),可以用来存储一系列的数组,就是这么简单。关于nc文件的介绍,可以参考:
https://www.unidata.ucar.edu/software/netcdf/docs/netcdf_introduction.html
既然 nc 可以用来一系列的数组,所以经常被用来存储科学观测数据,最好还是长时间序列的。
试想一下一个科学家每隔一分钟采集一次实验数据并存储了下来,如果不用这种格式存储,时间长了可能就需要创建一系列的 csv 或者 txt 等,而采用 nc 一个文件就可以搞定,是不是很方便呢?
更方便的是如果这个科学实验与气象、高防服务器水文、温度等地理信息稍微沾点边的,完全也可以用 nc 进行存储, GeoTiff 顶多能多存几个波段(此处波段可以认为是气象、水文等不同信号),而 nc 可以存储不同波段的长时间观测结果,是不是非常方便呢?
二、解决方案
方法一:常规读取 这个方法是在网上找到的,代码如下,其中关键部分有注释,应该都可以看得懂。
# -*- coding: utf-8 -*- import netCDF4 from netCDF4 import Dataset nc_obj = Dataset(D:\\tem_e0025_2.nc) # 查看nc文件有些啥东东 # print(nc_obj) # print(---------------------------------------) # 查看nc文件中的变量,结果是:[lon, lat, lev, time, tem] # print(nc_obj.variables.keys()) # for i in nc_obj.variables.keys(): # print(i) # print(---------------------------------------) # 查看每个变量的信息 # print(nc_obj.variables[lat]) # print(nc_obj.variables[lon]) # print(nc_obj.variables[lev]) # print(nc_obj.variables[time]) # print(nc_obj.variables[tem]) # print(---------------------------------------) # 查看每个变量的属性 # print(nc_obj.variables[lat].ncattrs()) # print(nc_obj.variables[lon].ncattrs()) # print(nc_obj.variables[lev].ncattrs()) # print(nc_obj.variables[time].ncattrs()) # print(nc_obj.variables[tem].ncattrs()) # # print(nc_obj.variables[lat].units) # print(nc_obj.variables[lon].units) # print(---------------------------------------) # 读取数据值 lat = (nc_obj.variables[lat][:]) lon = (nc_obj.variables[lon][:]) lev = (nc_obj.variables[lev][:]) # print(lev) time = (nc_obj.variables[time][:]) tem = (nc_obj.variables[tem][:]) # lat = (nc_obj.variables[lat][1:2]) # lon = (nc_obj.variables[lon][1:2]) # lev = (nc_obj.variables[lev][1:2]) # time1 = (nc_obj.variables[time][1:2]) # tem = (nc_obj.variables[tem][1:2]) # print(lat) # print(len(lat)) # print(lon) # print(lev) # print(time1) # print(len(time)) # print(tem) # print(---------------很赞哦!(696)
上一篇:
相关文章
- 打开https://www.aizhan.com/输入自己想要查询的域名然后按回车键,如果做过网站都会有数据显示出来
- 当我准备用SpringEvent优雅的解耦时,连续两个Bug把我搞懵了
- 【API架构】REST API 设计的原则和实践
- 全网都在说一个错误的结论,真的错了吗?
- 域名资源有限,好域名更是有限,但机会随时都有,这取决于我们能否抓住机会。一般观点认为,国内域名注册太深,建议优先考虑外国注册人。外国注册人相对诚实,但价格差别很大,从几美元到几十美元不等。域名投资者应抓住机遇,尽早注册国外域名。
- 高效使用C语言
- Java 基础入门篇结构语句和 If 语句
- MySQL转Oracle遇到的问题:表名长度及大小写问题
- 国际域名转移的费用和处理步骤是什么?
- 深入MySQL查询过程底层原理,我找到了MySQL查询慢的根本原因