f90nml - A Fortran namelist parser, generator, and editor¶
A Python module and command line tool for parsing Fortran namelist files
Documentation¶
The complete documentation for f90nml
is available from Read The Docs.
About f90nml¶
f90nml
is a Python module and command line tool that provides a simple
interface for the reading, writing, and modifying Fortran namelist files.
A namelist file is parsed and converted into an Namelist
object, which
behaves like a standard Python dict
. Values are converted from Fortran
data types to equivalent primitive Python types.
The command line tool f90nml
can be used to modify individual values inside
of a shell environment. It can also be used to convert the data between
namelists and other configuration formats. JSON and YAML formats are currently
supported.
Quick usage guide¶
To read a namelist file sample.nml
which contains the following namelists:
&config_nml
input = 'wind.nc'
steps = 864
layout = 8, 16
visc = 1.0e-4
use_biharmonic = .false.
/
we would use the following script:
import f90nml
nml = f90nml.read('sample.nml')
which would would point nml
to the following dict
:
nml = {
'config_nml': {
'input': 'wind.nc',
'steps': 864,
'layout': [8, 16],
'visc': 0.0001,
'use_biharmonic': False
}
}
File objects can also be used as inputs:
with open('sample.nml') as nml_file:
nml = f90nml.read(nml_file)
To modify one of the values, say steps
, and save the output, just
manipulate the nml
contents and write to disk using the write
function:
nml['config_nml']['steps'] = 432
nml.write('new_sample.nml')
Namelists can also be saved to file objects:
with open('target.nml') as nml_file:
nml.write(nml_file)
To modify a namelist but preserve its comments and formatting, create a
namelist patch and apply it to a target file using the patch
function:
patch_nml = {'config_nml': {'visc': 1e-6}}
f90nml.patch('sample.nml', patch_nml, 'new_sample.nml')
Command line interface¶
A command line tool is provided to manipulate namelist files within the shell:
$ f90nml config.nml -g config_nml -v steps=432
&config_nml
input = 'wind.nc'
steps = 432
layout = 8, 16
visc = 1.0e-4
use_biharmonic = .false.
/
See the documentation for details.
Installation¶
f90nml
is available on PyPI and can be installed via pip:
$ pip install f90nml
The latest version of f90nml
can be installed from source:
$ git clone https://github.com/marshallward/f90nml.git
$ cd f90nml
$ pip install .
Package distribution¶
f90nml
is not distributed through any official packaging tools, but it is
available on Arch Linux via the AUR:
$ git clone https://aur.archlinux.org/python-f90nml.git
$ cd python-f90nml
$ makepkg -sri
Volunteers are welcome to submit and maintain f90nml
on other
distributions.
Local install¶
Users without install privileges can append the --user
flag to pip
from
the top f90nml
directory:
$ pip install --user .
If pip is not available, then setup.py
can still be used:
$ python setup.py install --user
When using setup.py
locally, some users have reported that --prefix=
may need to be appended to the command:
$ python setup.py install --user --prefix=
YAML support¶
The command line tool offers support for conversion between namelists and YAML
formatted output. If PyYAML is already installed, then no other steps are
required. To require YAML support, install the yaml
extras package:
$ pip install f90nml[yaml]
To install as a user:
$ pip install --user .[yaml]
Contributing to f90nml
¶
Users are welcome to submit bug reports, feature requests, and code contributions to this project through GitHub. More information is available in the Contributing guidelines.
Contents¶
- Usage
- Basic API
- Classes
Parser
Namelist
Namelist.RepeatValue
Namelist.add_cogroup()
Namelist.create_cogroup()
Namelist.get()
Namelist.groups()
Namelist.items()
Namelist.keys()
Namelist.patch()
Namelist.todict()
Namelist.write()
Namelist.column_width
Namelist.default_start_index
Namelist.end_comma
Namelist.false_repr
Namelist.float_format
Namelist.indent
Namelist.index_spacing
Namelist.logical_repr
Namelist.repeat_counter
Namelist.split_strings
Namelist.start_index
Namelist.true_repr
Namelist.uppercase
- Command line interface
- Notes
- Contributing to
f90nml
Licensing¶
f90nml
is distributed under the Apache 2.0 License.
Contact¶
Marshall Ward <f90nml@marshallward.org>