python输出大量格式化文本的最佳方法

时间:2015-06-19 10:23:00

标签: python python-2.7

我试图想出将python中的大量格式化文本写入文本文件的最佳方法。我正在创建一个根据用户输入自动生成PHP文件的工具。

目前我对python的有限知识的唯一方法是将每行单独写入文件,如下所示:

print("    <html>", file=f)
print("        <head>", file=f)
print("        </head>", file=f)
print("        <body>", file=f)
.....

文档的骨架我打印到上面的文件,并添加用户通过raw_input提供的变量,如页面标题,元数据等

这样做的更好方法是什么?

我想我要找的东西类似于pythons评论这样的系统:

"""
page contents with indentation here + variables
"""

然后将其写入文件

4 个答案:

答案 0 :(得分:2)

您应该考虑查看Python templating。这将允许您使用变量(根据您的评论和问题更新)丰富您预先存在的数据。

答案 1 :(得分:2)

你所谓的&#34; python评论系统&#34;不是评论系统&#34; - 评论以&#34;#&#34;开头 - ,它是syntax for multiline strings。它也用于文档字符串(不是注释而是文档并成为文档化对象的属性)这一事实并不能使它成为一个合适的python字符串。 IOW,你可以用它来进行简单的模板化:

tpl = """
<html>
    <head>
    </head>
    <body>
        <h1>Hello {name}</h1>
    </body>
</html>
"""
print tpl.format(name="World")

但是对于任何涉及的问题 - 条件,循环等 - 你最好使用真正的模板系统(jinja可能是一个不错的选择)。

答案 2 :(得分:1)

如果您将所有行存储在列表中,则可以在列表上进行迭代:

# create lines however you want, put them in a list
linelist = ["    <html>", "        <head>", "        </head>", "        <body>"]

# open file
f=open('myfile.txt','w')

#write all lines to the file
for line in linelist:
    # Add a newline character after your string 
    f.write("".join([line,"\n"]))

f.close()

或者,更简洁:

linelist = ["    <html>", "        <head>", "        </head>", "        <body>"]

f=open('myfile.txt','w')
f.write("\n".join(linelist))
f.close()

答案 3 :(得分:1)

我们可以逐行写出输出数据:

with open("test1.txt", "wt") as f:
    for i in range(1000000):
        f.write("Some text to be written to the file.\n")

并且执行需要一些时间:

$ time python test1.py

real    0m0.560s
user    0m0.389s
sys     0m0.101s

或者我们可以在内存中准备整个输出,然后立即写入:

r = []
for i in range(1000000):
    r.append("Some text to be written to the file.\n")
with open("test2.txt", "wt") as f:
    f.write("".join(r))

执行时间不同:

$ time python test2.py

real    0m0.433s
user    0m0.252s
sys     0m0.100s

简单地说,内存中的操作通常比使用文件的操作更快。