#python #html #cgi
#python #HTML #cgi
Вопрос:
У меня есть скрипт на Python, который извлекает некоторый текст из файла и комментирует другой файл, записывая результаты в новый файл. Поскольку файлы, которые я аннотирую, являются ASCII, я очень ограничен в том, как я могу аннотировать текст, и я хотел бы вместо этого записать результаты в HTML, чтобы я мог комментировать, изменяя цвет текста в определенных частях. Часть текстового файла, которую я аннотирую, представляет собой просто строку символов (например, ACTFNKJLKD), которая неоднократно встречается в текстовом файле, из которого я читаю. Часть программы, которая находит строку, обновляется следующим образом:
print "Content-type:text/htmlrnrn" #header of cgi file
file1 = motif_file.readlines()
file2 = align_file_rmode.readlines()
for line in file2:
for item in file1: # "item" is the string sequence that occurs in the text file
item = item.strip().upper()
if item in line:
line = line.replace(item, 'REPLACE ITEM BY BLUE FONT' * len(item))
<p> <bold> item </bold> </p>
<font color="sky blue">item</font>
align_file_amode.write(line)
Есть ли способ указать, как изменить цвет (например, синий) для длины моего элемента при выводе его в HTML? Необходим ли CGI для работы такого типа?
Я работаю на Python 2.6.5
Комментарии:
1. Я не уверен, что делать с последними несколькими строками вашего кода с HTML-тегами, но я думаю, что уловил суть вашего вопроса. Есть ли какое-то значение, которого мне не хватает для длины
item
, или это просто то, как вы пытались сделать, чтобы текстitem
был выделен синим цветом?2. Также обратите внимание на некоторые ошибки в вашем примере кода: возвращайте file1 к началу (или повторно открывайте его) после каждой итерации вашего внешнего цикла. Отступ кажется перепутанным:
line = line.replace...
отступ должен быть сделан дважды, ноalign_file_amode.write(line)
отступ должен быть сделан только один раз (насколько я понимаю).3. @Mu Mind: Спасибо за ответы, значение len (item) заключается в том, что я хочу, чтобы текст менял цвет и записывался в HTML, но только тогда, когда программа обнаруживает вхождение элемента (например, ACTFNKJLKD) и длину этой строки (поэтому, если длина элемента составляет 10 букв, только эти 10 букв помечаются синим цветом, в то время как остальной текст остается черным).
4. @Spyros: хорошо, тогда да, это должно быть то, что делает мой ответ. Кстати, не забудьте принять ответ (зеленая галочка), если / когда вы будете удовлетворены тем, что на ваш вопрос получен ответ. Я заметил, что у вас висит несколько открытых Q.
5. @Mike Извините, я не заметил, что к каждому ответу прилагается кнопка «Принять» для выбора моего любимого ответа… исправлю это, обычно это небольшая часть каждого ответа, которая помогает мне двигаться вперед, но с этого момента я постараюсь поставить галочки!
Ответ №1:
Я думаю, вы хотите
line = line.replace(item, "<span style="color:skyBlue">" item "</span>")
Это просто добавит <span>
и установит цвет в CSS.
Комментарии:
1. @Mike: да, я не был уверен, должен ли этот HTML быть комментариями или частью выходных данных. (Вы имеете в виду вопрос, а не мой ответ, верно?)
2. Да, я говорю о вопросе OP… Сначала я удалил
python
тег b / c, я думал, что это чисто html-вопрос … затем я увидел там необработанный html и добавил его обратно3. Я попробовал ваши предложения и получаю внутреннюю ошибку сервера, думаю, что-то не так с конфигурацией сервера Apache…
4. @ MuMind: Привет, я просто хотел спросить, как работает строка, которую вы опубликовали. Это делает именно то, что я хочу, но я пытаюсь выяснить, почему.. Извините, если это слишком простой вопрос, но разве вам не пришлось бы использовать escape-символ для Python, чтобы знать, что элемент является строкой. Короче говоря, почему «<span styple=»color:skyBlue «< » item » </span>» не работает?
5. @Spyros:
item
не должно отображаться внутри строки, потому что это имя переменной. Подумайте об этом так:a = "<span style="color:skyBlue">"
,b = "</span>"
,line = line.replace(item, a item b)
. В некоторых языках сценариев, таких как sh, интерпретатор активно ищет замены внутри строки, но в python строка — это именно те символы, которые вы вводите.