Форум сайта python.su
Здравствуйте. Прошу прощения за беспокойство. Обращаюсь к вам по причине собственной ограниченности.
Дело вот в чем: Надо было распарсить xml с кодировкой cp1251 через SAX и записать результат в файл.
код xml для примера:
<?xml version=“1.0” encoding=“windows-1251” ?>
- <main>
- <Данные>
<ДатаНачала>22.03.2011</ДатаНачала>
</Данные>
</main>
код модуля:
import StringIO
from xml.sax.handler import ContentHandler
import xml.sax
class textHandler(ContentHandler):
def characters(self, ch):
output = StringIO.StringIO()
output.write(ch.encode(“cp1251”))
print ch
parser = xml.sax.make_parser()
handler = textHandler()
parser.setContentHandler(handler)
parser.parse(“new2.xml”)
try:
f = open('rez.txt','w')
f.write(handler)
finally:
f.close()
if __name__ == ‘__main__’:
pass
в результате получаем строку:
22.03.2011
и заново созданный, но пустой файл rez2.txt
что не правильно в коде?
что сделать что бы он записывал весь поток в файл?
Отредактировано (Янв. 26, 2012 14:30:18)
Офлайн
Ну вот что-то вроде такого:
from xml.sax.handler import ContentHandler
from xml import sax
class TextHandler(ContentHandler):
def __init__(self, filename):
ContentHandler.__init__(self)
self.filename = filename
def startDocument(self):
self.output = open(self.filename, 'w')
def endDocument(self):
self.output.close()
def characters(self, ch):
self.output.write(ch.encode("cp1251"))
if __name__ == '__main__':
parser = sax.make_parser()
handler = TextHandler('rez.txt')
parser.setContentHandler(handler)
parser.parse("new2.xml")
Офлайн
Спасибо большое, но этот код даже не создает нужного файла, а если таковой уже существует, то он не изменяет его.
Офлайн
Aristo.pyОбижаете, начальник. Код я проверил перед тем как постить. Проверьте имена файлов и отступы у себя.
Спасибо большое, но этот код даже не создает нужного файла, а если таковой уже существует, то он не изменяет его.
Офлайн
ПардоН!!! Моя глупость !!!! Все работает! Низкий Вам Поклон и здравствовать всю жизнь!
Офлайн