我试图想出将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
"""
然后将其写入文件
答案 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
简单地说,内存中的操作通常比使用文件的操作更快。