使用python的netCDF4庫(kù)讀取.nc文件和創(chuàng)建.nc文件-創(chuàng)新互聯(lián)

  使用python netCDF4庫(kù)讀取.nc文件 和 創(chuàng)建.nc文件

十載專注成都網(wǎng)站制作,成都定制網(wǎng)頁(yè)設(shè)計(jì),個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)頁(yè)設(shè)計(jì),高端網(wǎng)頁(yè)制作,對(duì)成都假山制作等多個(gè)行業(yè),擁有豐富的網(wǎng)站營(yíng)銷經(jīng)驗(yàn)。

  1. 介紹

  .nc(network Common Data Format)文件是氣象上常用的數(shù)據(jù)格式,python上讀取.nc使用較多的庫(kù)為netCDF4這個(gè)庫(kù),下面將介紹這個(gè)庫(kù)的具體方法。

  安裝很簡(jiǎn)單:

  pip install netCDF4

  2. .nc文件的讀取

  #導(dǎo)入nc庫(kù)

  import netCDF4 as nc

  filename = '2017-06-15_2017-06-17.nc' # .nc文件名

  f = nc.Dataset(filename) #讀取.nc文件,傳入f中。此時(shí)f包含了該.nc文件的全部信息

  #step1: 查看.nc文件的全部變量,及該變量的全部信息(維度大小,單位等)

  all_vars = f.variables.keys() #獲取所有變量名稱

  print(len(all_vars)) #長(zhǎng)度為18

  all_vars_info = f.variables.items() #獲取所有變量信息

  print(type(all_vars_info)) #輸出為: odict_items 。這里將其轉(zhuǎn)化為 list列表

  print(len(all_vars_info)) #長(zhǎng)度為18

  all_vars_info = list(all_vars_info) #此時(shí)每個(gè)變量的信息為其中一個(gè)列表

  如圖:包含經(jīng)緯度、時(shí)間、等變量名稱

  

使用python的netCDF4庫(kù)讀取.nc文件 和 創(chuàng)建.nc文件

  看看 all_vars_info的前兩個(gè)變量的信息,如下,顯示了 shape unit name float32 fillvalue等信息

  #step2: 查看.nc文件的單個(gè)變量,及該變量的全部信息(維度大小,單位等)

  如果對(duì)某個(gè)變量感興趣(已知變量名),想查看這個(gè)變量的信息,獲取這個(gè)變量的數(shù)據(jù),方法如下:

  #我們要查看 ’u‘的信息

  var = 'u'

  var_info = f.variables[var] #獲取變量信息

  var_data = f[var][:] #獲取變量的數(shù)據(jù)

  print(var_info)

  print(var_data.shape)

  #很方便轉(zhuǎn)化為array數(shù)組

  print(type(var_data)) # .nc文件的變量數(shù)組都為Masked array

  var_data = np.array(var_data) #轉(zhuǎn)化為np.array數(shù)組

  輸出如下:

  #step3: 列表形式記錄所有變量信息

  ###最直接的辦法,獲取每個(gè)變量的縮寫名字,標(biāo)準(zhǔn)名字(long_name),units和shape大小。這樣很方便后續(xù)操作

  all_vars_name = []

  all_vars_long_name = []

  all_vars_units = []

  all_vars_shape = []

  for key in f1.variables.keys():

  all_vars_name.append(key)

  all_vars_long_name.append(f1.variables[key].long_name)

  all_vars_units.append(f1.variables[key].units)

  all_vars_shape.append(f1.variables[key].shape)

  結(jié)果如下:

  

使用python的netCDF4庫(kù)讀取.nc文件 和 創(chuàng)建.nc文件

  **注意:**完成上述操作之后,記得關(guān)掉該文件

  f.close() #關(guān)閉文件。如果文件關(guān)閉后,再使用f.variabels.items()等操作是行不通的。

  3. nc文件的創(chuàng)建

  #step1: 創(chuàng)建一個(gè)文件

  f_w = nc.Dataset('hecheng.nc','w',format = 'NETCDF4') #創(chuàng)建一個(gè)格式為.nc的,名字為 ‘hecheng.nc’的文件

  #step2: 寫入一些基本的信息

  .nc文件的里面的每個(gè)變量都有維度信息,比如,上面的 var=‘u’,維度為 1237161*177。這里面的各個(gè)維度,并不是隨便定義的,是與基礎(chǔ)的變量信息相關(guān)的。

  如[12,37,161,177] = [time,level,latitude,longitude],第一個(gè)維度為時(shí)間信息,依次為 垂直層信息,緯度、經(jīng)度信息。

  所以,我們要先寫入一些基本的信息:時(shí)間,垂直層,緯度,經(jīng)度

  #time緯度為12。注意,第2個(gè)參數(shù) 表示維度,但是必須是 integer整型,也就是只能創(chuàng)建一個(gè)基礎(chǔ)單一維度信息。

  #如果后面要?jiǎng)?chuàng)建一個(gè)變量維度>1,則必須由前面的單一維度組合而來(lái)。后面會(huì)介紹。

  #確定基礎(chǔ)變量的維度信息。相對(duì)與坐標(biāo)系的各個(gè)軸(x,y,z)

  f_w.createDimension('time',12)

  f_w.createDimension('level',37)

  f_w.createDimension('lat',161)

  f_w.createDimension('lon',177)

  ##創(chuàng)建變量。參數(shù)依次為:‘變量名稱’,‘?dāng)?shù)據(jù)類型’,‘基礎(chǔ)維度信息’

  f_w.createVariable('time',np.int,('time'))

  f_w.createVariable('level',np.int,('level'))

  f_w.createVariable('lat',np.float32,('lat'))

  f_w.createVariable('lon',np.float32,('lon'))

  #寫入變量time的數(shù)據(jù)。維度必須與定義的一致。

  time = np.array([0,6,12,18,0,6,12,18,0,6,12,18])

  f_w.variables['time'][:] = time

  #新創(chuàng)建一個(gè)多維度變量,并寫入數(shù)據(jù),

  f_w.createVariable( 'u', np.float32, ('time','level','lat','lon'))

  var_data = np.ones(shape=(12,37,161,177), dtype = np.float32)

  f_w.variables[var][:] = var_data

  關(guān)閉文件

  f_w.close()

  還可以寫入fill_value等信息

  

使用python的netCDF4庫(kù)讀取.nc文件 和 創(chuàng)建.nc文件

  按照上述方式創(chuàng)建完成后,用一些可視化軟件打開,結(jié)果如上圖。

  #step3: 創(chuàng)建群組

  如上圖,所以變量都是平行的位置,如果變量特別多,將相同類型的變量放進(jìn)同一個(gè)group中,會(huì)更加方便。

  來(lái)看一個(gè)示例: 無(wú)錫婦科醫(yī)院排行 http://www.0510bhyy.com/

  f_w = nc.Dataset('haha4.nc','w',format = 'NETCDF4')

  f_w.createDimension('time',12)

  f_w.createDimension('level',37)

  f_w.createDimension('lat',161)

  f_w.createDimension('lon',177)

  f_w.createVariable('time',np.int,('time'))

  f_w.createVariable('level',np.int,('level'))

  f_w.createVariable('lat',np.float32,('lat'))

  f_w.createVariable('lon',np.float32,('lon'))

  time = np.array([0,6,12,18,0,6,12,18,0,6,12,18])

  f_w.variables['time'][:] = time

  f_w.variables['level'][:] = level

  f_w.createVariable( 'q', np.float32, ('time','level','lat','lon'))

  var_data = np.ones(shape=(12,37,161,177), dtype = np.float32)

  f_w.variables['q'][:] = var_data

  #創(chuàng)建一個(gè)群組,名字為'wind'

  group1 = f_w.createGroup('wind')

  group1.createVariable( 'u', np.float32, ('time','level','lat','lon'))

  var_data = np.ones(shape=(12,37,161,177), dtype = np.float32)

  group1.variables['u'][:] = var_data

  group1.createVariable( 'v', np.float32, ('time','level','lat','lon'))

  var_data = np.zeros(shape=(12,37,161,177), dtype = np.float32)

  group1.variables['v'][:] = var_data

  group1.close # 關(guān)閉群組, 注意,這里沒有括號(hào)

  f_w.close()

  創(chuàng)建結(jié)果如下:

  看,group的信息出來(lái)了

  **#step4:查看帶有g(shù)roup的.nc文件的信息 **

  f1 = nc.Dataset('haha5.nc')

  vars = f1.variables.keys() #odict_keys(['time', 'level', 'lat', 'lon', 'q']) 看不到groups信息

  #通過(guò)以下命令

  group_name = f1.groups.keys() #獲取組名,輸出為:odict_keys(['wind'])

  使用如下命令都能看到group內(nèi)的變量的信息。

  #獲取group內(nèi)的變量的數(shù)據(jù)

  group_var_data = f1['wind']['u'][:]

  print(group_var_data.shape) #(12, 37, 161, 177)

  4. 總結(jié)

  氣象上常用除了.nc文件外,還有 hdf文件,這兩者格式都差不多,但是我更愛.hdf格式文件

網(wǎng)頁(yè)名稱:使用python的netCDF4庫(kù)讀取.nc文件和創(chuàng)建.nc文件-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)于:http://muchs.cn/article22/dgidjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、移動(dòng)網(wǎng)站建設(shè)網(wǎng)站維護(hù)、服務(wù)器托管、網(wǎng)站營(yíng)銷做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)