我有一堆 netcdf 格式的文件。 每个文件包含不同时期某个地方的气象条件(每小时数据) 我需要为每个文件提取前12小时的数据。所以我选择使用NCO(netcdf运算符)来处理。
NCO 适用于终端环境。使用>ncks -d Time 0,11 input.nc output.nc
,我可以获得一个名为out.nc
的数据文件,其中包含in.nc
的前12h数据。
我想在ipython笔记本中保留所有进程。但我坚持两个方面。
如何在python循环中执行终端代码
- 醇>
如何将python中的字符串传递给终端代码。
这是我的假代码。
files = os.listdir('.')
for file in files:
filename,extname = os.path.splitext(file)
if extname == '.nc':
output = filename + "_0-12_" + extname
## The code below was my attempt
!ncks -d Time 0,11 file output`
基本上,我的目标是让假代码!ncks -d Time 0,11 file output
成真。这意味着:
filename
这是python环境中的字符串。 抱歉我的问题不明确。任何建议将不胜感激!
答案 0 :(得分:2)
您可以使用subprocess.check_output
执行外部程序:
import glob
import subprocess
for fn in glob.iglob('*.nc'):
filename, extname = os.path.splitext(fn)
output_fn = filename + "_0-12_" + extname
output = subprocess.call(['ncks', '-d', 'Time', '0,11', fn, output_fn])
print(output)
注意:更新代码以使用glob.iglob
;您无需手动检查扩展程序。
答案 1 :(得分:2)
您也可以查看pynco,它使用子进程调用包装NCO,类似于@fatetru的答案。您的应用程序可能类似于
nco = Nco()
for fn in glob.iglob('*.nc'):
filename, extname = os.path.splitext(fn)
output_fn = filename + "_0-12_" + extname
nco.ncks(input=filename, output=output_fn, dimension='Time 0,11')