Генерация HTML из простого текста с маркерами форматирования в Python 3 - PullRequest
0 голосов
/ 10 июля 2011

Я написал набор скриптов Python 3, чтобы взять отформатированный текстовый файл и переместить данные в базу данных SQLite. Данные в базе данных затем используются как часть приложения PHP. Данные в моем текстовом файле имеют маркеры форматирования для полужирного шрифта и курсива, но не во всем понятном для браузера. Схема форматирования такая:

fi:xxxx        (italics on the word xxxx (turned off at the word break))
fi:{xxx…xxx}   (italics on the word or phrase in the curly brackets {})
fb:xxxx        (bold on the word xxxx (turned off at the word break))
fb:{xxx}       (bold on the word or phrase in the brackets {})
fv:xxxx        (bold on the word xxxx (turned off at the word break))
fv:{xxx…xxx}   (bold on the word or phrase in the brackets {})
fn:{xxx…xxx}   (no formatting)

Я хотел бы преобразовать каждую строку исходного текста в (1. строку, содержащую строку, использующую html-теги вместо форматирования исходного текста, и 2. другую строку, содержащую строку, очищенную от всех маркеров форматирования). Мне нужна отформатированная и зачеркнутая строка для каждой строки исходного текста, даже если в этой строке не используются маркеры форматирования. В исходных данных несколько маркеров форматирования разного (или одинакового) вида могут отображаться в одной строке, но вы не найдете ни одного маркера, который заканчивается до конца строки.

1 Ответ

1 голос
/ 10 июля 2011

Чтобы отформатировать разделы в скобках, вы можете сделать что-то вроде этого:

while text.find(":{") > -1:
    index = text.find(":{")
    if text[index-2:index]=="fb":
        text = text[:index-2] + "<b>" + text[index+2:] #insert <b>
        text = text.replace("}","</b>",1) # replace one.
    # else if fi, fv, etc.

Это преобразует «другой текст fb: {полужирный текст}» в «другой полужирный текст текст».

Тогда вы можете преобразовать разделенные пробелами разделы:

array = text.split(" ")
for word in array:
    if (word.startswith("fi")):
        word = "<i>"+word[2:]+"</i>"
    else if (word.startswith("fb")):
        ....
text = " ".join(array)

Если вы хотите простой текст, просто замените теги, такие как "" и "", на пустую строку "".

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

inFile = open("file.txt","r")
outFile = open("file.out","w")

def convert(text):
    #Change text here.
    return text

for line in inFile:
    outFile.write(convert(line))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...