- 积分
- 8121
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2015-4-25
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 又是那隻貓 于 2017-5-23 16:48 编辑
可以说这是个小问题,大家如果在做与模式相关的内容总归会用到的
直接搜索也能找到,家园里可能大家都没在意这种小问题,但我觉着还是稍微总结一下比较好
本人才疏,现在用的是 f90nml 库。这个库比较简单,基本思路就是在Python自带的dictionary类型基础上加了对Fortran所用namelist格式的识别。具体有没有其他方便的工具,也没细看,如果你发现了也欢迎总结分享~
附上网址:
https://pypi.python.org/pypi/f90nml
http://f90nml.readthedocs.io/en/latest/
OK,开始吧
具体操作很简单
# 载入模块并打开文件
- import f90nml #载入模块
- nml_path = 'A/B/namelist.input'
复制代码
或者直接给路径
- nml = f90nml.read(nml_path)
复制代码
得到nml为多层字典(dict)组成的namelist类
# 更改和配置namelist
更改和取值直接用dict的操作
- nml['config_nml']['steps'] = 432
复制代码
这个相当于把下面的 xxx 设置成了 432
- &config_nml
- ...
- steps = xxx
- ...
- /
复制代码 当然,如果只是取值那你直接
- a = nml['config_nml']['steps']
复制代码 这里需要注意一下,如果该值只是一个,那么会存成对应的内容,比如int什么的
但有时会有多个,会存成Python的list类型
用的时候注意判断,比如 WRF 的配置里会有 max_domain 这种
# 写入文件
写入也是直接路径或更靠谱些给文件对象
- with open('target.nml') as nml_file:
复制代码
或者
如果想有原始批注和格式 comments and formatting ,用patch() 函数
- f90nml.patch(nml_file,nml, 'target.nml')
复制代码
上面那个nml 表示修改过的namelist , 第一个 nml_file 是要采取的文件格式(这里直接用了原文件),最后 target.nml 是输出
这里我个人是不建议写入原文件的。一般我都是直接写成新文件(在新路径下),类似于 先复制一份,然后修改 吧,但感觉更保险点儿,省得把原文件冲掉~
# End
希望对大家有帮助
|
|