Запись выходных данных скрипта python в HTML с помощью CGI

#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 строка — это именно те символы, которые вы вводите.