我有一个可用的Python程序,使用netCDF4模块中的Dataset命令读取了许多大型netCDF文件。这里是相关部分的片段:
from netCDF4 import Dataset
import glob
infile_root = 'start_of_file_name_'
for infile in sorted(glob.iglob(infile_root + '*')):
ncin = Dataset(infile,'r')
ncin.close()
我希望修改代码以读取被压缩的netCDF文件。这些文件在创建后被压缩,而不是内部压缩(即文件为*.nc.gz)。如果我要读取被压缩的文本文件,则命令如下:
from netCDF4 import Dataset
import glob
import gzip
infile_root = 'start_of_file_name_'
for infile in sorted(glob.iglob(infile_root + '*.gz')):
f = gzip.open(infile, 'rb')
file_content = f.read()
f.close()
在谷歌上搜索了大约半个小时并阅读了netCDF4文档后,我能想到的唯一一种处理netCDF文件的方法是:
from netCDF4 import Dataset
import glob
import os
infile_root = 'start_of_file_name_'
for infile in sorted(glob.iglob(infile_root + '*.gz')):
os.system('gzip -d ' + infile)
ncin = Dataset(infile[:-3],'r')
ncin.close()
os.system('gzip ' + infile[:-3])
是否可以使用Dataset命令直接读取gzip文件?或者不通过os调用gzip进行读取?
gzip
系统调用,但我不知道是什么。你为什么需要让 Dataset 处理它呢? - Spencer Hillgzip.open
返回一个类似文件的对象,可用于只读访问文件 - 但似乎 netCDF4 不支持该功能。如果是我,我会使用 Python gzip 模块解压缩到临时文件并保留原始文件。如果这是经常需要完成的任务,您可以开始维护已解压缩文件的缓存。如果文件被修改,您仍然需要解压缩和重新压缩,所以无妨。 - tdelaney