Python中CDO链式调用多运算符报错:输入过多问题求助
解决CDO链式调用多运算符时"too many inputs"错误的方法
问题原因
你的写法错误地给链式调用中的每个运算符都添加了前缀-,CDO会将每个带-的片段识别为独立的命令/运算符选项,进而触发输入数量过多的错误。CDO链式调用的规范格式是仅第一个运算符需要加-,后续链式处理的运算符直接写名称和参数即可,无需前缀。
解决方案
方案一:修正字符串拼接,移除冗余的-前缀
手动去掉拼接字符串中运算符的开头-,因为sellonlatbox作为第一个运算符已由Python CDO库自动处理前缀:
terms = 'mulc,0.1' # 移除开头的'-' bounding_box = '-2.2,-1.4,34.8,35.2' str_chname = ( f'chname,{source_name},{target_name} ' # 移除开头的'-' f'{terms} ' f"{os.path.join(dir_input, f'fn_in}_{year}.nc')}" ) cdo.sellonlatbox(bounding_box, input=str_chname, output=os.path.join(output_dir, f'{fn_out}.nc'))
修正后生成的CDO命令会符合规范格式:
cdo -O -s -sellonlatbox,-2.2,-1.4,34.8,35.2 chname,strd,lwdown mulc,0.1 in/input.nc out/output.nc
方案二:使用Python CDO库原生链式调用(推荐)
利用CDO库的方法链式调用能力,无需手动拼接字符串,从根源避免前缀错误,代码可读性更强:
bounding_box = '-2.2,-1.4,34.8,35.2' input_file = os.path.join(dir_input, f'fn_in}_{year}.nc') output_file = os.path.join(output_dir, f'{fn_out}.nc') # 按处理顺序嵌套调用:先重命名变量,再乘以系数,最后裁剪区域 cdo.sellonlatbox(bounding_box, input=cdo.mulc('0.1', input=cdo.chname(f'{source_name},{target_name}', input=input_file)), output=output_file)
补充说明
单个运算符调用正常的原因是:此时input仅包含文件路径,没有多余的带-的片段,CDO不会误识别额外的输入源;调整运算符顺序仍报错,是因为所有链式运算符都加了-,不管顺序如何都会触发同样的识别错误。
内容的提问来源于stack exchange,提问作者Sven Berendsen
相关产品推荐
相关产品推荐

