Найти - Пользователи
Полная версия: вставка html верстки в файл из пайтон
Начало » Python для новичков » вставка html верстки в файл из пайтон
1 2
thomas
Всем привет!

у меня есть шелл скрипт, генерирующий тесктовик.
Мне необходимо этот текстовик давать в браузер человеку.
Тут есть нюанс - в браузере идет очень длинная нечитабельная строчка.
Решение - забабахать однострочнут таблицу в формате хтмл.

Для этого мне нужно, что черзе пайтон была работа с файлом, где в начале файла идет следующее:
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 </head>
 <title>One long row</title>
<body>
<table width="100%" cellspacing="0" cellpadding="5">

Затем в уже существующие строки файла идет:
<tr><td width="500" valign="top">
в начале строки, а в конце строки:
</td></tr>
В конец файла добавляются закрывающие теги:
</table>
</body>
</html>

С работой файлов через пайтон я не очень дружу.
Понятное дело, что нужно открыть файл с правами на запись (?)
file_input = open('/path_to_file/file_name.html','r+')
но затем не знаю, как реализовать добавление строк в начало файла, добавление текста в начало строки и в конец строки и добавление строк в конце файла.
Я так понимаю, что это массив + работа в цикле, но реализовать - понятия не имею.
Буду рад любой помощи!
py.user.next
pagefmt = """\
<html>
  <head>
    <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
    <title>Text</title>
  </head>
  <body>
{}
  </body>
</html>"""
 
tabfmt = """\
<table width="100%" cellspacing="0" cellpadding="5">
{}
</table>"""
 
rowfmt = """\
<tr><td width="500" valign="top">
{}
</td></tr>"""
 
text = """\
aa aa aa
bb bb bb
cc cc cc"""
 
rows = map(rowfmt.format, text.splitlines())
table = tabfmt.format('\n'.join(rows))
page = pagefmt.format(table)
 
print(page)

<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<title>Text</title>
</head>
<body>
<table width="100%" cellspacing="0" cellpadding="5">
<tr><td width="500" valign="top">
aa aa aa
</td></tr>
<tr><td width="500" valign="top">
bb bb bb
</td></tr>
<tr><td width="500" valign="top">
cc cc cc
</td></tr>
</table>
</body>
</html>
thomas
[snake@ktovmasian-vm1 file_work2]$ python test1.py 
Traceback (most recent call last):
  File "test1.py", line 25, in <module>
    rows = map(rowfmt.format, text.splitlines())
AttributeError: 'file' object has no attribute 'splitlines'


сплитлайнз не умеет с файлом.
Есть какой-нибудь воркараунд?

py.user.next
text = fin.read()
thomas
Traceback (most recent call last):
  File "test1.py", line 26, in <module>
    rows = map(rowfmt.format, text.splitlines())
ValueError: zero length field name in format

у меня питон 2.6.6
terabayt
f_out = r'<html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <title>One long row</title><body><table width="100%" cellspacing="0" cellpadding="5">'
with open(r'/home/andrey/Downloads/test.txt', 'r') as f:
	for i in  f.readlines():
		f_out += '<tr><td width="500" valign="top">' + i + '</td></tr>'
f_out += '</table></body></html>'
with open(r'/home/andrey/Downloads/test.html', 'w') as f:
	f.write(f_out)
dimy44
В питон 26 запись вида
'{}'.format(...)
не работает, обязательно нужно индекс указать, поэтому нужно дописать нули в
rowfmt = """ \
<tr><td width="500" valign="top">
{0}
</td></tr>"""
и подобных участках кода
py.user.next
thomas
у меня питон 2.6.6
dimy44
обязательно нужно индекс указать

Лучше вместо добавления индекса поставить питон 2.7, если принципиальна вторая версия.
thomas
py.user.next
Лучше вместо добавления индекса поставить питон 2.7, если принципиальна вторая версия.
Тут принципиально даже не использовать вторую версию, а конкретно версию 2.6.6, т.к. на сервере мне не разрешат поставить пайтон 2.7.
Так бы я на 3.4.1 все это написал бы и не парился.
thomas
terabayt
f_out = r'<html><head> <meta http-equiv=“Content-Type” content=“text/html; charset=utf-8”> </head> <title>One long row</title><body><table width=“100%” cellspacing=“0” cellpadding=“5”>'
with open(r'/home/andrey/Downloads/test.txt', ‘r’) as f:
for i in f.readlines():
f_out += ‘<tr><td width=“500” valign=“top”>’ + i + ‘</td></tr>’
f_out += ‘</table></body></html>’
with open(r'/home/andrey/Downloads/test.html', ‘w’) as f:
f.write(f_out)


вот эта вот штука отлично отработала! спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB