-1

Pythonでシリアル通信スクリプトを作成しようとしています。テンプレート付きのファイルとテキストテーブル付きのファイルが1つずつあります。テキストテーブルを置換ソースとして使用するにはどうすればよいですか?

入力例:テンプレートファイル:

Hello <name>,
We will be hosting some event in <town> bla bla...

値のあるテーブル

name      town       age   gender
Phillip   New York   22    male
Sonia     Warsaw     19    female

期待される出力は、カスタマイズされたテキストを含む2つのファイルです。

4

2 に答える 2

2

これには2つの部分があります。1つ目は、テキストテーブルを解析して、挿入する必要のある値へのテンプレートプレースホルダーのマッピングのリストを取得することです。2つ目は、テンプレートへの値の実際の置換です。どちらもかなり簡単です。

テーブル内の列が複数のスペースで区切られ、複数のスペースが実際の列見出しまたは値の一部を形成しないと仮定すると、正規表現を使用して各行をかなり簡単かつクリーンにフィールドに分割し、それらの値を置き換えることができます。テンプレートに入れるのは簡単です。

import re

text_table = <something> # Replace with whatever you do to load the table
template_text = <something> # Replace with whatever you do to load the template

row_splitter = re.compile("  +") # Finds a sequence of two or more spaces
rows = text_table.split('\n') # Split the table into a list of rows
headings_row = rows[0]
headings = row_splitter.split(headings_row)

# Next we get a list of dictionaries mapping template placeholders to values
template_dicts = []
for row in rows:
    values = row_splitter.split(row)
    template_dict = dict(zip(headings, values))
    template_dicts.append(template_dict)

# Next we substitute the values sets into the template one by one:
for template_dict in template_dicts:
    result_text = template_text
    for key, value in template_dict.iteritems():
        result_text = result_text.replace('<'+key+'>', value)
    print result_text # Or do whatever you like with it

テンプレートファイルを制御できる場合は、三角形の括弧で囲まれたプレースホルダーを括弧で囲まれたプレースホルダー(のように'Hello {name}, I see you are {age} years old')に置き換えることができます。次に、 String.formatを使用して、テンプレートに値を代入するだけで、コードがさらに簡単になります。

于 2013-02-07T21:24:09.673 に答える
1

再インポート

table_lines = open('your_table', 'r').read()
table = [ re.split(' +', l) for l in table_file[1:] ]

mail = open('your_template_dir', 'r').read()

for name,town,age,gender in table :
    re.sub('<name>', name, mail)
    re.sub('<town>', town, mail)
    re.sub('<age>', age, mail)
    re.sub('<gender>', gender, mail)

print mail

個人的には、テーブルにSQLiteを使用することをお勧めします。

于 2013-02-07T22:33:04.217 に答える