【问题标题】:How to read multiple lines in a template and substitute values?如何读取模板中的多行并替换值?
【发布时间】:2019-10-10 14:55:21
【问题描述】:

我有一段标准文本,它有多行,格式如下:

owner: oracle
date_conditions: 1
    timezone: US/Eastern
    std_out_file: "/app/local/job.log"
    machine: rachost

我想使用上面的文本,并根据需要更改机器和时区。 如何使用 python 定义这是一个模板并替换各种值? 我在string.Template 中遇到了替换选项。但这似乎只适用于单行。

【问题讨论】:

  • 这个模板应该被阅读以便在其他地方使用,或者这是您想要制作的模板?我知道你说读它,但你提到你也想写它。
  • 哪些值应该替换为哪些值?为什么不使用%(key)s(或与format对应),从而有更好的模板插入字典?!
  • @FlorianBernard 我想使用此模板并生成具有相似格式的新文本,并为机器或时区设置新值。我需要使用此新文本文件通过邮件发送。

标签: python python-3.x string-substitution


【解决方案1】:

string.Template可以处理由多行组成的字符串。

例如:

from string import Template

template = Template('''\
owner: oracle
date_conditions: 1
    timezone: $tz
    std_out_file: "/app/local/job.log"
    machine: $mach
''')

result = template.substitute(tz='US/Pacific', mach='foobar')
print(result, end='')

打印:

owner: oracle
date_conditions: 1
    timezone: US/Pacific
    std_out_file: "/app/local/job.log"
    machine: foobar

【讨论】:

  • 这工作正常,正是我所需要的。 print语句中end=''的作用是什么?
  • end='' 抑制换行符 print() 默认添加。不需要,因为模板字符串以 1 结尾。如果模板的行是从文件中读取的,则最后一行可能也有一个,因此您可能也希望在这种情况下使用它。
  • 我们如何将“结果”发送到电子邮件。
  • @vivek:抱歉,这是一个完全不相关的问题,听起来您并没有尝试自己做任何事情。建议你看看 Python 的smtplib 模块的文档。
  • 我有一个发送电子邮件的功能:def sendjilmail(email_address='vievk@abc.com'): global glob_email_msg msg = MIMEMultipart() msg​​['From']= 'check@abc. com' msg['To'] = email_address msg['Subject'] = '缺少文件电子邮件' msg.attach(MIMEText(glob_email_msg,'html')) s = smtplib.SMTP('mailhost.jpmchase.net') s .starttls() s.sendmail('check@abc.com', email_address, msg.as_string()) s.quit() 但问题是它没有根据需要保留带有空格的文件的确切格式。
猜你喜欢
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
相关资源
最近更新 更多