Source code for torx.fileio.namelist_reader_m
"""Implementation of a reader for Fortran namelists."""
from collections import defaultdict
from os import name
from pathlib import Path
import f90nml
from tempfile import NamedTemporaryFile
from torx.autodoc_decorators_m import autodoc_function
[docs]
@autodoc_function
def read_fortran_namelist(path: Path):
"""Read a Fortran namelist using the f90nml module."""
assert path.exists()
namelist = f90nml_read_file(path)
return convert_dict_to_defaultdict_recursive(namelist)
def f90nml_read_file(filename: Path):
"""Read a Fortran namelist file and return a dict."""
namelist = f90nml.read(str(filename)).todict()
return namelist
def convert_dict_to_defaultdict_recursive(input_dict):
"""Convert all dicts and values into defaults recursively."""
input_dict = defaultdict(list, input_dict)
for key, item in input_dict.items():
if isinstance(item, dict):
input_dict[key] = convert_dict_to_defaultdict_recursive(item)
return input_dict