string – Is there a native templating system for plain text files in Python?

string – Is there a native templating system for plain text files in Python?

You can use the standard library string an its Template class.

Having a file foo.txt:

$title
$subtitle
$list

And the processing of the file (example.py):

from string import Template

d = {
    title: This is the title,
    subtitle: And this is the subtitle,
    list: n.join([first, second, third])
}

with open(foo.txt, r) as f:
    src = Template(f.read())
    result = src.substitute(d)
    print(result)

Then run it:

$ python example.py
This is the title
And this is the subtitle
first
second
third

If your prefer to use something shipped with the standard library, take a look at the format string syntax. By default it is not able to format lists like in your output example, but you can handle this with a custom Formatter which overrides the convert_field method.

Supposed your custom formatter cf uses the conversion code l to format lists, this should produce your given example output:

cf.format({title}n{subtitle}nn{list!l}, title=title, subtitle=sibtitle, list=list)

Alternatively you could preformat your list using n.join(list) and then pass this to your normal template string.

string – Is there a native templating system for plain text files in Python?

There are quite a number of template engines for python: Jinja, Cheetah, Genshi etc. You wont make a mistake with any of them.

Leave a Reply

Your email address will not be published. Required fields are marked *