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

Posted Python进阶者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# 盘点两种使用Python读取.nc文件的方法相关的知识,希望对你有一定的参考价值。

 大家好,我是Python进阶者。


前言

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

#yyds干货盘点#

    .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(---------------******-------------------)

    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文件路径即可,其他的内容,你可以自行自取。


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

      # -*- 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(rE:\\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))

      #yyds干货盘点#

      本文参考链接:
      1. https://blog.csdn.net/showpingzhang/article/details/83384780
      2. https://www.cnblogs.com/shoufengwei/p/9068379.html

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


      三、总结

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

          最后感谢分享【温池】提问,感谢【

      以上是关于#yyds干货盘点# 盘点两种使用Python读取.nc文件的方法的主要内容,如果未能解决你的问题,请参考以下文章

      #yyds干货盘点#读取txt文件 - python数据训练系列

      #yyds干货盘点# Windows下Python-openCV学习-------图像处理基本

      #yyds干货盘点#dart系列之:如丝滑般柔顺,操作文件和目录

      # yyds干货盘点 # 手把手教你使用Python提取快递信息

      # yyds干货盘点# 盘点两种方法来判断一个列表里面,按关键词进行筛选,留下包含有关键词的论文题目

      redis两种持久化类型 #yyds干货盘点#