2017-02-25 15 views
7

Tôi có nhiều tệp YAML trong một thư mục cấu hình và một loạt các mẫu trong một thư mục mẫu. Có một cách đơn giản lót hoặc chức năng mà tôi có thể sử dụng để giải quyết một file YAML và thay thế trong các mẫu tập tin để tạo ra các script thực thigiải quyết các tệp YAML và thay thế thành các mẫu

Đầu vào:
cấu hình thư mục: config/yaml1, config/yaml2, config/yaml3..
mẫu: template/template1, template/template2, template3.

Output
scripts/script1, script2, script3

Số script = số mẫu

Có 2 loại mẫu

Một trong đó là thay thế đơn giản Ví dụ

YAML1: 
    Titles:4 
    SubTitles:10 
Template1: 
Number of Titles {Titles} where as Number of Subtitles is {SubTitles} 

Mẫu khác là một mẫu lồng nhau. Về cơ bản các mẫu cần phải được looped dựa trên YAML Ví dụ:

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} 

Trả lời

1

YAML không biết gì về các mẫu, và bạn không chỉ định những loại mẫu cần cập nhật. Nhưng nếu bạn đang sử dụng ngôn ngữ templating giả định giá trị của nó để thay thế đến từ các cặp khóa-giá trị trong một Python dict, thì bạn có thể chỉ định một ánh xạ mức cao nhất trong tệp YAML của bạn, tải (mà sẽ được xây dựng thành một Python) dict) và sau đó cấp dữ liệu đó vào công cụ mẫu.

Bạn sẽ vẫn phải đi qua các tệp của mình, do đó, một vài dòng mã có nhiều khả năng hơn là thực hiện được ở trên trong một lớp lót.

2

Tôi không hoàn toàn chắc chắn những gì bạn đang cố gắng hoàn thành, tôi không biết ý bạn là gì bởi các tập lệnh thực thi? Nếu tôi diễn giải nó một cách chính xác, bạn có thể hưởng lợi từ việc xem Tài liệu PyYAML. Cụ thể, phần trên YAML Tags and Python Types.

Có một số thẻ YAML cho phép các mô-đun hoặc gói python được gọi và các đối số gói được điền bởi các thẻ lồng nhau YAML bên dưới nó. Vì vậy, bạn sẽ phải viết một lớp hoặc chức năng mà tiêu thụ các kwargs YAML nhưng bạn sẽ chỉ cần gọi nó trong cấu hình YAML với một dòng như vậy,

!!python/object/apply:module.function [argument, ...] 

Mặc dù bạn cũng có thể được hưởng lợi từ việc xem xét các phần trên Constructors, Representers and Resolvers cũng như string.Template từ tài liệu python.

Về lý thuyết, bạn có thể gọi hàm replace() từ bên trong tệp YAML.

Các vấn đề liên quan