2015-06-19 3 views
0

Я пытаюсь думать о лучшем способе написать большое количество форматированного текста в python в текстовый файл. Я создаю инструмент, который автоматически генерирует файлы PHP в зависимости от ввода пользователя.python лучший способ вывода большого количества отформатированного текста

Единственный способ моего ограниченное знание питона может придумать на данный момент написать каждую строку по отдельности в файл следующим образом:

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

Скелет документа печатает в файл, как и выше, и добавьте переменные, которые пользователь предоставляет через raw_input, такие как заголовок страницы, метаданные и т. д.

Что было бы лучшим способом сделать это?

Я полагаю, что я искал бы что-то похожее на питонов комментирующих системы, как это:

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

Затем запишите это в файл

+0

Откуда вы получаете данные? – WoJ

+0

«Скелет» документа, который я сейчас распечатываю и добавляю в переменные, которые пользователи вводят через raw_input, такие как заголовок страницы, метаданные и т. Д. – twigg

ответ

2

то, что вы называете «система комментариев python», НЕ является «системой комментариев» - комментарии начинаются с «#» -, это syntax for multiline strings. Тот факт, что он также используется для docstrings (которые не являются комментариями, а документацией и становятся атрибутами документального объекта), не делает его менее подходящей строкой python. IOW, вы можете использовать его для простых шаблонов:

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

, но для чего-нибудь более активного участия - условных, петли и т.д. - вы бы лучше использовать реальную шаблонную систему (дзиндзя, вероятно, является хорошим выбором).

+0

Мне нравится идея этого ответа и вид джиня – twigg

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() 
2

Вы должны рассмотреть вопрос о Python templating. Это позволит вам обогатить ваши существующие данные переменными (за ваш комментарий и обновление вопроса).

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 

Проще говоря, операции в памяти обычно быстрее операций с файлами.

Смежные вопросы