什么是pythonic方式来输出大量需要格式化的多行字符串?
我的python应用程序是一个预处理器;我的输出是另一个应用程序的输入。另一个应用程序具有各种多行节标题,这些标题根据版本进行细微更改。我的申请表填写了所有部分 我当前的“打印机”定义了几个带格式替换的多行字符串。打印语句将替换为写入语句:什么是pythonic方式来输出大量需要格式化的多行字符串?,python,string,format,writing,Python,String,Format,Writing,我的python应用程序是一个预处理器;我的输出是另一个应用程序的输入。另一个应用程序具有各种多行节标题,这些标题根据版本进行细微更改。我的申请表填写了所有部分 我当前的“打印机”定义了几个带格式替换的多行字符串。打印语句将替换为写入语句: def generate(): header=""" Multi-line header Symbols that form a logo changes with version "
def generate():
header="""
Multi-line header
Symbols that form a logo
changes with version
"""
anotherSection="""
this section header
is shorter
(
{myFiller}
)
"""
print header
print anotherSection.format(myFiller = "{}{}{}".format(myFiller.content))
print anotherSection2.format(myFiller = [x.strip() for x in myFiller.content2])
print anotherSection3.format(myFiller = myFiller3.content)
“myFiller”是对包含原始数据的类的调用,这些原始数据可能需要根据节进行格式化
让一堆多行字符串给实际的“打印”蒙上阴影有些不对劲。.format(.format)的内容可能也有点难以阅读
你对如何构建这个有什么想法吗
我一直在玩弄一本章节字符串字典,但我不喜欢打印语句界面(并不是说我喜欢单独的打印语句:
format_requirements={'header': """.....""",'section':"""...."""}
print format_requirements['header'].format(....)
我所倾向的版本在每个节字符串定义中都使用函数。这对于版本更改很好,但我不确定这是正确的做法(我主要关心的是将生成函数与一系列其他函数进行卷积):
我还玩过类、迭代列表和其他一些东西。在阅读了样式指南(推动我进入.format()方向)和各种帖子后,我来到这里,想了解一些更具python风格和易读性的东西
我愿意接受任何指导和方法来构建这个
谢谢!我会选择一个类,它将原始输入保存在
\u data
属性中,并有方法为每个“版本”输出格式正确的字符串
为什么不使用支持循环结构的适当模板库呢?好的选择是Jinja2、pystache等。我没有想到这一点。我对第三方依赖关系非常谨慎。这是一个小的单文件应用程序,执行复杂的数学和工程计算,没有导入语句/依赖关系。我来看看。然后ks!谢谢你的回复。我很喜欢这个想法。这个类将处理所有繁重的工作,生成器只调用适当的版本实例。我没有想过按版本存储每个字符串,我将不得不调查每个节类型的vs.方法。你会在这个类中还是在泛型中执行替换ator?替换可能非常长;您是否希望通过在此处传递更大的实例与在生成器处替换来获得不同的性能?啊,好的,大字符串。上面的内容并不是为了存储不同的版本(尽管如果需要,您可以缓存结果)只存储输入字符串,然后通过方法按需构建格式化字符串。如果您甚至不能存储输入字符串,您可以将生成器存储在类中。此外,您还可以为不同的部分创建不同的类,例如
HeaderFormatter
SectionOneFormatter
,等等,如果您创建了类如果使用生成器,则需要记住只能使用一次,如果尝试从同一实例调用两次,可能会引发异常。
def header(version):
header=""
if version == v1:
header="""...."""
if version ==v2:
header="""..."""
return header
def section(type):
section="""...."""
return section
print header(v1).format(....)
print section
class MyStringFormatter(object):
def __init__(header=None, content=None):
self._data = {'header': header, 'content': content}
def version_one(self):
# format strings here
return stringv1