Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 26, 2012 14:29:14

Aristo.py
От:
Зарегистрирован: 2011-08-26
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

запись в файл результата парсинга (SAX)

Здравствуйте. Прошу прощения за беспокойство. Обращаюсь к вам по причине собственной ограниченности.
Дело вот в чем: Надо было распарсить 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)

Офлайн

#2 Янв. 27, 2012 06:53:24

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

запись в файл результата парсинга (SAX)

Ну вот что-то вроде такого:

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")



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Янв. 27, 2012 07:25:34

Aristo.py
От:
Зарегистрирован: 2011-08-26
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

запись в файл результата парсинга (SAX)

Спасибо большое, но этот код даже не создает нужного файла, а если таковой уже существует, то он не изменяет его.



Офлайн

#4 Янв. 27, 2012 08:09:22

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

запись в файл результата парсинга (SAX)

Aristo.py
Спасибо большое, но этот код даже не создает нужного файла, а если таковой уже существует, то он не изменяет его.
Обижаете, начальник. Код я проверил перед тем как постить. Проверьте имена файлов и отступы у себя.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Янв. 27, 2012 08:36:11

Aristo.py
От:
Зарегистрирован: 2011-08-26
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

запись в файл результата парсинга (SAX)

ПардоН!!! Моя глупость !!!! Все работает! Низкий Вам Поклон и здравствовать всю жизнь!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version