当前位置: 首页 > 科技观察

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

时间:2023-03-19 13:54:22 科技观察

大家好,我是Python进阶。前言前几天有个叫【文驰】的粉丝在Python钻石交流群里问了一个关于读取.nc文件的问题,如下图。.nc文件不同于常规文件。有一个专门的第三方处理库,netCDF4,需要安装。如果pipinstallnetCDF4感觉下载慢,可以使用换源的方法下载:pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplenetCDF4永久换源可以参考这篇文章:Teachyouhowtochangethesourcewithpip,LetyourPythonlibrarydownloadswish(series2),教你如何用pip改源,让你的Python库下载swish。一、nc文件基础知识nc的全称是netCDF(TheNetworkCommonDataForm),可以用来存储一系列的数组,就这么简单。nc文件的介绍可以参考:https://www.unidata.ucar.edu/software/netcdf/docs/netcdf_introduction.html由于nc可以用于一系列的数组,所以常用于存储科学观测数据,最好是长期序列。想象一下,一位科学家每隔一分钟收集一次实验数据并存储起来。如果不存储成这种格式,时间长了可能需要创建一系列的csv或者txt,但是用nc一个文件就可以搞定对吧?方便吗?更方便的是,如果这个科学实验有一点气象、水文、温度等地理信息,也可以存到nc中,GeoTiff最多可以多存几个波段(这里的波段可以可以看作是气象水文等不同的信号),而且nc可以存储不同波段的长期观测结果,是不是很方便?有一些评论,应该可以理解。#-*-coding:utf-8-*-importnetCDF4fromnetCDF4importDatasetnc_obj=Dataset('D:\\tem_e0025_2.nc')#查看nc文件中的一些内容#print(nc_obj)#print('--------------------------------------')#查看nc文件中的变量,结果为:['lon','lat','lev','time','tem']#print(nc_obj.variables.keys())#foriinnc_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')foriinrange(len(lat)):文件.write(str(lat[i])+',\n')file.write(str(lon[i])+',')file.write(str(lev[i])+',')文件.write(str(time[i])+',')file.write(str(tem[i])+',\n')file.close()代码中只需要替换nc文件路径即可,其他的内容,可以自己去获取方法二:直接获取值这个方法是【文池】提供的,也可以读取文件获取值。#-*-coding:utf-8-*-importnetCDF4fromnetCDF4importDataset#查看nc文件中的变量,结果为:['lon','lat','lev','time','tem']#print(nc_obj.variables.keys())#foriinnc_obj.variables.keys():#print(i)#print('-------------------------------------')A_temp=Dataset(r'E:\PythonCrawler\InterestingCode\DataAnalysis\LeastSquaresDataAnalysisCodeandData\Temperature_20211031.nc')lat=A_temp['latitude'][:].data#497numberslon=A_temp['longitude'][:].data#409numberstemp=A_temp['T'][:].data#409numbersdepth=A_temp['depth'][:].data#51numbersprint(len(lat))print(len(lon))本文参考链接:1.https://blog.csdn.net/showpingzhang/article/details/833847802。https://www.cnblogs.com/shoufengwei/p/9068379.html取值后,接下来就是做回归,聚类等,就不细说了。3.总结我是Python进阶。本文根据粉丝的问题给出了读取.nc文件问题的两种解决方案,成功帮助粉丝解决了问题。