2013-07-23 55 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计划。