Техника Python или простая система шаблонов для вывода простого текста - PullRequest
50 голосов
/ 17 июня 2011

Я ищу либо технику, либо систему шаблонов для Python для форматирования вывода в простой текст. Что мне нужно, так это то, что он сможет перебирать несколько списков или диктов. Было бы неплохо, если бы я мог определить шаблон в отдельный файл (например, output.templ) вместо жесткого кодирования его в исходный код.

В качестве простого примера того, чего я хочу достичь, у нас есть переменные title, subtitle и list

title = 'foo'
subtitle = 'bar'
list = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

При запуске через шаблон вывод будет выглядеть следующим образом:

Foo
Bar

Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Как это сделать? Спасибо.

Ответы [ 4 ]

169 голосов
/ 17 июня 2011

Вы можете использовать стандартную библиотеку шаблон строки :

Итак, у вас есть файл foo.txt с

$title
...
$subtitle
...
$list

и словарь

d={ 'title':title, 'subtitle':subtitle, 'list':'\n'.join(list) }

Тогда это довольно просто

from string import Template
#open the file
filein = open( 'foo.txt' )
#read it
src = Template( filein.read() )
#do the substitution
src.substitute(d)

Тогда вы можете напечатать src

Конечно, как сказал Jammon, у вас есть много других хороших шаблонизаторов (это зависит от того, что вы хотите сделать ... стандартный шаблон строки, вероятно, самый простой)


Полный рабочий пример

foo.txt

$title
...
$subtitle
...
$list

example.py

from string import Template
#open the file
filein = open( 'foo.txt' )
#read it
src = Template( filein.read() )
#document data
title = "This is the title"
subtitle = "And this is the subtitle"
list = ['first', 'second', 'third']
d={ 'title':title, 'subtitle':subtitle, 'list':'\n'.join(list) }
#do the substitution
result = src.substitute(d)
print result

Затем запустите example.py

$ python example.py
This is the title
...
And this is the subtitle
...
first
second
third
14 голосов
/ 17 июня 2011

Если вы предпочитаете использовать что-либо, поставляемое со стандартной библиотекой, взгляните на синтаксис строки формата .По умолчанию он не может форматировать списки, как в примере вывода, но вы можете справиться с этим с помощью пользовательского средства форматирования , которое переопределяет метод convert_field.

Предположим, что ваш пользовательский форматировщик cf использует код преобразования l для форматирования списков, это должно привести к полученному вами примеру:

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

В качестве альтернативы вы можете предварительно отформатировать свой список, используя "\n".join(list), а затем передать егоВаша обычная строка шаблона.

10 голосов
/ 17 июня 2011

Существует множество шаблонизаторов для python: Джинджа , Гепард , Генши и т. Д. .Вы не ошибетесь ни с одним из них.

0 голосов
/ 17 июня 2011

Не знаю, просто ли это, но Гепард может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...