У меня проблемы с .isupper (), когда у меня строка в кодировке utf-8. У меня много текстовых файлов, которые я конвертирую в xml. Хотя текст очень изменчив, формат статичен. слова, написанные заглавными буквами, должны быть заключены в теги
и все остальное
. Это значительно сложнее, но этого должно быть достаточно для ответа на мой вопрос.
Моя проблема в том, что это файл UTF-8. Это обязательно, так как в окончательном выводе будет некоторое много неанглийских символов. Возможно, пришло время привести краткий пример:
inputText.txt
РЕЗЮМЕ
Bacon ipsum dolor sit amet strip steak курица на косточке, ирурский молотый, круглый nostrud aute pancetta ham hock incididunt aliqua. Долоре короткая филейная часть бывшая курица, куриная голень гамбургер ут андуй. В труде eiusmod короткая филейная часть, ребрышки enim колбаса кончика шарика. Вырезка ут конскват фланг. Tempor officia филе дуи. In pancetta do, ut долоре t-bone sint pork pariatur Долоре курица упражнения. Ноструд рибай хвост, ут улламко оленина моллит свиная отбивная Proident Conctetur Fugiat
DesiredOutput
<title>RÉSUMÉ</title>
<p>Bacon ipsum dolor sit amet strip steak t-bone chicken, irure ground round nostrud
aute pancetta ham hock incididunt aliqua. Dolore short loin ex chicken, chuck drumstick
ut hamburger ut andouille. In laborum eiusmod short loin, spare ribs enim ball tip sausage.
Tenderloin ut consequat flank. Tempor officia sirloin duis. In pancetta do, ut dolore t-bone
sint pork pariatur dolore chicken exercitation. Nostrud ribeye tail, ut ullamco venison
mollit pork chop proident consectetur fugiat reprehenderit officia ut tri-tip.
</p>
Образец кода
#!/usr/local/bin/python2.7
# yes this is an alt-install of python
import codecs
import sys
import re
from xml.dom.minidom import Document
def main():
fn = sys.argv[1]
input = codecs.open(fn, 'r', 'utf-8')
output = codecs.open('desiredOut.xml', 'w', 'utf-8')
doc = Documents()
doc = parseInput(input,doc)
print>>output, doc.toprettyxml(indent=' ',encoding='UTF-8')
def parseInput(input, doc):
tokens = [re.split(r'\b', line.strip()) for line in input if line != '\n'] #remove blank lines
for i in range(len(tokens)):
# THIS IS MY PROBLEM. .isupper() is never true.
if str(tokens[i]).isupper():
title = doc.createElement('title')
tText = str(tokens[i]).strip('[\']')
titleText = doc.createTextNode(tText.title())
doc.appendChild(title)
title.appendChild(titleText)
else:
p = doc.createElement('p')
pText = str(tokens[i]).strip('[\']')
paraText = doc.createTextNode(pText)
doc.appendChild(p)
p.appenedChild(paraText)
return doc
if __name__ == '__main__':
main()
В конечном итоге это довольно просто, я бы принял критику или предложения по моему коду. А кто бы не стал? В частности, я недоволен str (tokens [i])
, возможно, есть лучший способ перебрать список строк?
Но цель этого вопроса - найти наиболее эффективный способ проверить, написана ли строка utf-8 с заглавной буквы. Возможно, мне стоит подумать о создании для этого регулярного выражения.
Обратите внимание, я не запускал этот код, и он может работать неправильно. Я вручную выбрал части из рабочего кода и, возможно, что-то опечатал. Оповестите меня, и я исправлю. наконец, обратите внимание, я не использую lxml