从文件模板创建文件的zc.buildout方法

as.recipe.filetemplate的Python项目详细描述


基本用法

使用 as.recipe.filetemplate构建配方,您可以自动执行 从模板生成文本文件。执行死刑后, 配方将读取多个模板文件,执行变量 替换并将结果写入相应的输出文件。

这个配方有几个特性,但它总是使用带有 。在 后缀中,处理模板,并将文件写入所需的 具有相同文件模式和相同名称但没有 的位置。 后缀. < /P>

例如,考虑这个文本文件的简单模板:

< Buff行情>
>>> write(sample_buildout, 'helloworld.txt.in',
... """
... Hello ${world}!
... """)

现在让我们创建一个构建配置,以便我们可以替换 此文件中的值。我们要做的就是定义一个使用 as.recipe.filetemplate 配方。使用 文件 参数 我们指定一个或多个需要替换的文件(用 空白)。然后,我们可以向部分添加任意参数。 这些将用于填充模板中的变量:

< Buff行情>
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = message
...
... [message]
... recipe = as.recipe.filetemplate
... files = helloworld.txt
... world = Philipp
... """)

在执行buildout之后,我们可以看到 ${world} 确实 替换为Philipp < Buff行情>

>>> print system(buildout)
Installing message.
>>> cat(sample_buildout, 'helloworld.txt')
Hello Philipp!

如果需要转义${…}模式,可以通过重复使用美元 符号。 < Buff行情>

>>> update_file(sample_buildout, 'helloworld.txt.in',
... """
... Hello world! The double $${dollar-sign} escapes!
... """)
>>> print system(buildout)
Uninstalling message.
Installing message.
>>> cat(sample_buildout, 'helloworld.txt')
Hello world! The double ${dollar-sign} escapes!

请注意,不带大括号的美元符号本身不会被解析。

< Buff行情>
>>> update_file(sample_buildout, 'helloworld.txt.in',
... """
... $Hello $$world! $$$profit!
... """)
>>> print system(buildout)
Uninstalling message.
Installing message.
>>> write(sample_buildout, 'helloworld.txt.in',
... """
... Hello ${world}!
... """)
0

注意,输出文件使用与输入文件相同的权限位 文件

< Buff行情>
>>> write(sample_buildout, 'helloworld.txt.in',
... """
... Hello ${world}!
... """)
1
源文件夹和全局文件

默认情况下,配方查找相对于构建根的 文件中的 。 并将其放置在相对于构建根目录的同一文件夹中。然而,如果 你不想把目标文件夹弄乱,你可以添加一个前缀到 源文件夹。下面是一个例子。

首先,我们在构建中指定一个源目录。您可以指定 文件 作为过滤器(如果需要),但默认情况下它会找到任何文件(结束 带".in")。如果需要,还可以指定排除目录选项 从源目录中排除一些路径。

< Buff行情>
>>> write(sample_buildout, 'helloworld.txt.in',
... """
... Hello ${world}!
... """)
2

现在我们将创建一个"template"目录,如buildout配置中所列 在上面,为我们的示例填充它。

< Buff行情>
>>> write(sample_buildout, 'helloworld.txt.in',
... """
... Hello ${world}!
... """)
3

注意,在运行buildout之前,helloworld.txt文件仍然是 我们没有etc目录,bin目录没有 helloworld.sh

< Buff行情>
>>> write(sample_buildout, 'helloworld.txt.in',
... """
... Hello ${world}!
... """)
4

现在我们安装。旧的"helloworld.txt"已经不见了,我们现在看到了etc.note 对于目标,如果中间文件夹没有 存在。

< Buff行情>
>>> write(sample_buildout, 'helloworld.txt.in',
... """
... Hello ${world}!
... """)
5

文件已经存在,并且具有我们期望的内容。

< Buff行情>
>>> write(sample_buildout, 'helloworld.txt.in',
... """
... Hello ${world}!
... """)
6

如果将 文件 选项与 源目录一起使用,则它将成为 过滤器。每个目标文件必须至少与 文件 中的一个名称匹配。 因此,如果我们只构建.sh文件,etc目录将消失。

< Buff行情>
>>> write(sample_buildout, 'helloworld.txt.in',
... """
... Hello ${world}!
... """)
7
>>> write(sample_buildout, 'helloworld.txt.in',
... """
... Hello ${world}!
... """)
8
>>> write(sample_buildout, 'helloworld.txt.in',
... """
... Hello ${world}!
... """)
9

还要注意,如果使用源目录和 文件,请指定 目录,目录必须精确匹配。

使用 exclude directories参数,我们指定一个或多个目录 (用空格分隔)其中配方将不查找模板 文件夹。"排除目录"选项应与 源目录选项。 因此,如果我们设置 排除目录 bin/helloworld.sh 文件将消失。

< Buff行情>
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = message
...
... [message]
... recipe = as.recipe.filetemplate
... files = helloworld.txt
... world = Philipp
... """)
0
>>> write(sample_buildout, 'helloworld.txt.in',
... """
... Hello ${world}!
... """)
5
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = message
...
... [message]
... recipe = as.recipe.filetemplate
... files = helloworld.txt
... world = Philipp
... """)
2
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = message
...
... [message]
... recipe = as.recipe.filetemplate
... files = helloworld.txt
... world = Philipp
... """)
3
>>> write(sample_buildout, 'buildout.cfg',
... """
... [buildout]
... parts = message
...
... [message]
... recipe = as.recipe.filetemplate
... files = helloworld.txt
... world = Philipp
... """)
4

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
与ReentrantLock相比,java ReentrantReadWriteLock的性能非常差   java如何使用Maven Android Studio正确导入?   安卓将ADB添加到我的Java PC应用程序   反射Java getDeclaredConstructor失败,来自JUnit的NoSuchMethodException   JSP上siteedit标记库的java替代   JavaSpring环境概要文件和JPA   java中是否有一个类似于StringBuilder的类,唯一的区别是它具有固定的长度?   JavaMathContext。小数点32 vs MathContext。小数点64,使用哪一个,为什么?   java使用spring在Ibm Websphere MQ中实现重试逻辑   java调用SpriteBatch。开始()和结束()   java有一种从文本中读取文本的方法。文件,并将其设置为pom中的maven属性。xml专家?   java让sitemesh使用struts2   Java Swing:在现有窗口上定位对话框   使用带有MemSql的JPA本机查询的java Select json列