2017-03-07 6 views
0

나는 템플릿 폴더에있는 템플릿과 설정 폴더에 YAML 파일들을 많이 가지고있다. 내가 가진 유스 케이스는 yaml 설정과 템플릿을 기반으로 텍스트 파일을 생성하는 것이다. 파이썬이 유혹하는 엔진이이 문제를 해결하는 데 사용될 수 있는지 알고 싶습니다.템플릿 엔진을 사용하여 코드 생성 (텍스트)

템플릿 엔진이 웹 개발 컨텍스트에서 사용되는 것을 볼 수 있습니다. 내가 가지고있는 유스 케이스는 매우 유사하다 (그러나 같지 않다). 일부 텍스트를 생성하고 싶습니다. 그것은 웹 페이지에 표시 될 필요가 없습니다. 대신 텍스트 파일 만 생성해야합니다.

예 입력 : 구성 폴더 : 설정/yaml1, 설정/yaml2, 설정/yaml3 .. 템플릿 : 템플릿/template1를 템플릿/template2, template3.

출력

scripts/script1, script2, script3 

= 템플릿 수

템플릿의 2 종류의 스크립트 수 있습니다

/직접 대체가 다른
YAML1: 
    Titles:4 
    SubTitles:10 
Template1: 
Number of Titles {Titles} where as Number of Subtitles is {SubTitles} 

간단

하나 템플릿은 중첩 된 템플릿입니다. 기본적으로 템플릿은 YAML 예에 따라 루프 형 할 필요가 :

YAML2: 
     Book: "The Choice of using Choice" 
      Author: "Unknown1" 
     Book: "Chasing Choices" 
      Author:"Known2" 

Template2 
Here are all the Books with Author Info 
The author of the {Book} is {Author} 

예상 출력은 자막의 수는 10 하여 더 선택의 저자로 제목 4

수있는 하나의 텍스트 파일입니다 선택을 사용하는 것은 알 수 없음 1 쫓는 선택의 저자는 이미 알고 있습니다.

누군가 올바른 방향으로 나를 게시 할 수 있습니까?

답변

0

정규식과 검색/바꾸기로이 작업을 수행 할 수 있습니다. re.sub 함수에 문자열 대신 함수를 전달할 수 있습니다.

 
YAML1: 
    Titles: 4 
    # ^need space here 
    SubTitles: 10 
Template1: 
    Number of Titles {Titles} where as Number of Subtitles is {SubTitles} 
    # Need indentation here 

는 파이썬 코드는 다음과 같습니다 :

import re 
import yaml 

# Match either {var}, {{, or }} 
TEMPLATE_CODE = re.compile(r'\{(\w+)\}|\{\{|\}\}') 

def expand(tmpl, namespace): 
    print(namespace) 
    def repl(m): 
     name = m.group(1) 
     if name: 
      # Matched {var} 
      return str(namespace[name]) 
     # matched {{ or }} 
     return m.group(0)[0] 
    return TEMPLATE_CODE.sub(repl, tmpl) 

def expand_file(path): 
    with open(path) as fp: 
     data = yaml.safe_load(fp) 
    print(expand(data['Template1'], data['YAML1'])) 

을 그리고 여기에 출력입니다 : 물론, 유효 YAML을 가지고에 의존 물론,

 
Number of Titles 4 where as Number of Subtitles is 10 

이있다, 적절한 템플릿 엔진을 사용하는 것과 같이 더 복잡하게 만드는 많은 방법.

+0

저는 치타와 같은 유혹적인 엔진을 사용하는 것과 같은 간단한 솔루션을 찾고 있습니다. 누군가 올바른 방향으로 나를 가리킬 수 있는지 궁금 해서요 – pmv

+0

@pmv : 왜 이것이 잘못된 방향입니까? 당신이 이미 사용하고자하는 템플릿 엔진 (Cheetah)을 이미 알고 있다면, 그냥 가서 사용하지 않는 이유는 무엇입니까? –

+0

나는이 문제를 해결하기위한 수단으로 템플릿 엔진을 사용하려고 생각하고있다. 나는 구체적으로 의사 코드를 찾고있다. – pmv