前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >盘点两种使用Python读取.nc文件的方法

盘点两种使用Python读取.nc文件的方法

作者头像
前端皮皮
发布2023-08-17 09:17:09
4270
发布2023-08-17 09:17:09
举报

前天在最强王者交流群,突然有人问起使用Python读取.nc文件的方法,正好之前有写过文章,这里拿出来跟大家分享下。

大家好,我是Python进阶者。

前言

前几天有个叫【温池】的粉丝在Python钻石交流群里问了一道关于.nc文件读取的问题,如下图所示。

.nc文件和常规的文件不太一样,有专门的第三方处理库,netCDF4,需要安装才行。

代码语言:javascript
复制
pip install netCDF4

如果觉得下载的慢,可以使用换源的方法进行下载:

代码语言:javascript
复制
pip install -i  https://pypi.tuna.tsinghua.edu.cn/simple netCDF4

关于永久换源可以参考这个文章:手把手教你进行pip换源,让你的Python库下载嗖嗖的(系列二)手把手教你进行pip换源,让你的Python库下载嗖嗖的

一、nc文件基础知识

nc 全称 netCDF(The Network Common Data Form),可以用来存储一系列的数组,就是这么简单。关于nc文件的介绍,可以参考:

代码语言:javascript
复制
https://www.unidata.ucar.edu/software/netcdf/docs/netcdf_introduction.html

既然 nc 可以用来一系列的数组,所以经常被用来存储科学观测数据,最好还是长时间序列的。

试想一下一个科学家每隔一分钟采集一次实验数据并存储了下来,如果不用这种格式存储,时间长了可能就需要创建一系列的 csv 或者 txt 等,而采用 nc 一个文件就可以搞定,是不是很方便呢?

更方便的是如果这个科学实验与气象、水文、温度等地理信息稍微沾点边的,完全也可以用 nc 进行存储, GeoTiff 顶多能多存几个波段(此处波段可以认为是气象、水文等不同信号),而 nc 可以存储不同波段的长时间观测结果,是不是非常方便呢?

二、解决方案

方法一:常规读取

这个方法是在网上找到的,代码如下,其中关键部分有注释,应该都可以看得懂。

代码语言:javascript
复制
# -*- 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('---------------******-------------------')

file = open('ppm_lat.txt', 'a')
file.write('lat,lon,time,tem'+'\n')
file.write('lat,lon'+'\n')
file.write('lat'+'\n')
for i in range(len(lat)):
    file.write(str(lat[i])+',\n')
    file.write(str(lon[i])+',')
    file.write(str(lev[i])+',')
    file.write(str(time[i])+',')
    file.write(str(tem[i])+',\n')
file.close()

你只需要替换代码中的nc文件路径即可,其他的内容,你可以自行自取。

方法二:直接取值

‍ 这个方法是【温池】自己提供的,也是可以读取文件,进行取值的。

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import netCDF4
from netCDF4 import Dataset


# 查看nc文件中的变量,结果是:['lon', 'lat', 'lev', 'time', 'tem']
# print(nc_obj.variables.keys())
# for i in nc_obj.variables.keys():
#     print(i)
# print('---------------------------------------')

A_temp = Dataset(r'E:\PythonCrawler\有趣的代码\数据分析\最小二乘法数据分析代码和数据\Temperature_20211031.nc')
lat = A_temp['latitude'][:].data  # 497个数字
lon = A_temp['longitude'][:].data  # 409个数字
temp = A_temp['T'][:].data  # 409个数字
depth = A_temp['depth'][:].data  # 51个数字

print(len(lat))
print(len(lon))
代码语言:javascript
复制
本文参考链接:
1. https://blog.csdn.net/showpingzhang/article/details/83384780
2. https://www.cnblogs.com/shoufengwei/p/9068379.html

取值之后,接下来做回归、聚类等,就不展开赘述了。

三、总结

我是Python进阶者。本文基于粉丝提问,针对.nc文件读取的问题,给出了两种解决方法,顺利帮助粉丝解决了问题。虽然文中例举了两种方法,但是小编相信肯定还有其他的方法的,也欢迎大家在评论区谏言。

最后感谢分享【温池】提问,感谢【🌑(这是月亮的背面)】、【dcpeng】等大佬参与讨论和解决。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python共享之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大家好,我是Python进阶者。
  • 前言
  • 前几天有个叫【温池】的粉丝在Python钻石交流群里问了一道关于.nc文件读取的问题,如下图所示。
  • 一、nc文件基础知识
  • 二、解决方案
  • 三、总结
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档