Уведомления

Группа в Telegram: @pythonsu

#1 Июль 16, 2014 12:25:20

thomas
Зарегистрирован: 2014-07-10
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

вставка html верстки в файл из пайтон

Всем привет!

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

Для этого мне нужно, что черзе пайтон была работа с файлом, где в начале файла идет следующее:

<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+')
но затем не знаю, как реализовать добавление строк в начало файла, добавление текста в начало строки и в конец строки и добавление строк в конце файла.
Я так понимаю, что это массив + работа в цикле, но реализовать - понятия не имею.
Буду рад любой помощи!

Офлайн

#2 Июль 16, 2014 12:48:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

вставка html верстки в файл из пайтон

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>



Отредактировано py.user.next (Июль 16, 2014 12:48:55)

Офлайн

#3 Июль 16, 2014 13:33:00

thomas
Зарегистрирован: 2014-07-10
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

вставка html верстки в файл из пайтон

[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'


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

Офлайн

#4 Июль 16, 2014 13:43:02

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

вставка html верстки в файл из пайтон

text = fin.read()



Офлайн

#5 Июль 16, 2014 14:06:50

thomas
Зарегистрирован: 2014-07-10
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

вставка html верстки в файл из пайтон

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

Офлайн

#6 Июль 16, 2014 18:28:31

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

вставка html верстки в файл из пайтон

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)



————————————————
-*- Simple is better than complex -*-

Офлайн

#7 Июль 16, 2014 20:29:20

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

вставка html верстки в файл из пайтон

В питон 26 запись вида

'{}'.format(...)
не работает, обязательно нужно индекс указать, поэтому нужно дописать нули в
rowfmt = """ \
<tr><td width="500" valign="top">
{0}
</td></tr>"""
и подобных участках кода

Офлайн

#8 Июль 17, 2014 00:46:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

вставка html верстки в файл из пайтон

thomas
у меня питон 2.6.6
dimy44
обязательно нужно индекс указать

Лучше вместо добавления индекса поставить питон 2.7, если принципиальна вторая версия.



Офлайн

#9 Июль 17, 2014 09:33:00

thomas
Зарегистрирован: 2014-07-10
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

вставка html верстки в файл из пайтон

py.user.next
Лучше вместо добавления индекса поставить питон 2.7, если принципиальна вторая версия.
Тут принципиально даже не использовать вторую версию, а конкретно версию 2.6.6, т.к. на сервере мне не разрешат поставить пайтон 2.7.
Так бы я на 3.4.1 все это написал бы и не парился.

Офлайн

#10 Июль 21, 2014 09:16:00

thomas
Зарегистрирован: 2014-07-10
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

вставка html верстки в файл из пайтон

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)


вот эта вот штука отлично отработала! спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version