2013-07-23 84 views
1

我想從netCDF文件中取一個變量並打印出來。這裏是我的代碼使用Python從netCDF文件打印一個變量

import netCDF4 
import netCDF4_utils 
from netCDF4 import Dataset 
from numpy.random import uniform 
import csv 

B = [] 
rootgrp = Dataset('test.cdf', 'r', format = 'NETCDF4') 
f = open('testoutput.csv','wb') 

b = (rootgrp.variables['grid_optical_depth'][:]) 
for x in b: 
     B.append(x) 
f.write(str(B)) 
rootgrp.close() 
f.close() 

當我運行此我得到一個非常大集,這似乎是重複的數據,但我沒有看到我的for循環如何這樣做,不應該只通過運行數據集一次? 也有人可以說爲什麼數據打印出每組四行?如果我運行print rootgrp.variables['grid_optical_depth']我得到

<type 'netCDF4.Variable'> 
float32 grid_optical_depth(grid_time, range) 
    long_name: Grid_Aerosol_Optical_Depth_Profile 
    units: (n/a) 
    temporal_average: 20.0 
unlimited dimensions: 
current shape = (1440, 399) 

這是否意味着這兩個數字的對應grid_time和憤怒值?我不認爲這是事實,因爲所有數字都小於1(大約10^-3和-4)。

任何幫助表示讚賞

+0

添加編輯'b =(rootgrp.variables ['grid_optical_depth'] [:,:])'from [http://stackoverflow.com/questions/16641437/importing-variables-from-netcdf-into-python ?rq = 1]讓我得到了與之前相同的答案 – KJo

+1

能否請您將a和b重命名爲您期望的結果? – 2013-07-23 17:22:17

+0

我已經刪除了A,B應該只是一個氣溶膠光學部值的列表。我將這些附加到B,因爲我不能直接將'(rootgrp.variables ['grid_optical_depth'] [:])'寫入文件 – KJo

回答

4

我與另一個文件測試你的代碼,它提供了預期的結果:從打印netCDF文件的變量爲CSV文件。它不打印變量兩次,也許這是你的文件的一個特點。

您的grid_optical_depth變量的形狀爲(1440, 399),第一個索引對應於維度grid_time,第二個索引對應的維度爲range。當您執行循環for x in b:時,您將追加變量的每一列(最多1440),每列將有399行。

此外,你並不需要循環。如果設置numpy的的打印選項,以顯示完整的數組,你可以直接打印整個數組爲一個字符串,像這樣:

import numpy as np 
import netCDF4 
rootgrp = netCDF4.Dataset('test.cdf', 'r', format='NETCDF4') 
f = open('testoutput.csv','wb') 

np.set_printoptions(threshold='nan') 
f.write(str(rootgrp.variables['grid_optical_depth'][:])) 
f.close() 
rootgrp.close() 

如果你想要的是一個NetCDF變量編寫成文本格式,然後我強烈認爲你熟悉ncdump計劃。