IT박스

일반 텍스트 출력을위한 Python 기술 또는 간단한 템플릿 시스템

itboxs 2021. 1. 9. 09:38
반응형

일반 텍스트 출력을위한 Python 기술 또는 간단한 템플릿 시스템


간단한 텍스트로 출력 형식을 지정하기 위해 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

어떻게하나요? 감사합니다.


Python 용 템플릿 엔진에는 Jinja , Cheetah , Genshi 등이 많이 있습니다. 그들 중 누구와도 실수하지 않을 것입니다.


표준 라이브러리 문자열 템플릿을 사용할 수 있습니다 .

당신은 파일이 그래서 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

표준 라이브러리와 함께 제공되는 것을 사용하려면 형식 문자열 구문을 살펴보십시오 . 기본적으로 출력 예제와 같이 목록의 형식을 지정할 수 없지만 메서드 를 재정의 하는 사용자 지정 Formatter 로이를 처리 할 수 ​​있습니다 convert_field.

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}\n\n{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.


I don't know if it is simple, but Cheetah might be of help.

ReferenceURL : https://stackoverflow.com/questions/6385686/python-technique-or-simple-templating-system-for-plain-text-output

반응형