Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 12, 2008 07:54:42

Vjn
От:
Зарегистрирован: 2008-11-12
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

_Люди помогите с XML

Не могу сделать следующее: имеется txt файл такого содержания

дата рождения|ФИО
дата рождения|ФИО
дата рождения|ФИО
дата рождения|ФИО
…………………………
…………………………

Как мне в Python создать XML на основе данных этого файла?



Офлайн

#2 Ноя. 12, 2008 09:27:18

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

_Люди помогите с XML

Читайте построчно и пишите в другой текстовый файл :)
а вообще - вы бы хоть структуру входного файла полностью привели и DTD или схему для xml



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

Офлайн

#3 Ноя. 12, 2008 10:57:16

Vjn
От:
Зарегистрирован: 2008-11-12
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

_Люди помогите с XML

..задача следующая. мне нужно написать питон-сценарий который будет читать текстовый файл построчно и формировать XML, вот такого вида:
<DATA>
<RECORD DATE=“дата рождения1” FIO=“ФИО1”/>
<RECORD DATE=“дата рождения2” FIO=“ФИО2”/>
<RECORD DATE=“дата рождения3” FIO=“ФИО3”/>
<RECORD DATE=“дата рождения4” FIO=“ФИО4”/>
</DATA>
..этот питон скрип будут использоваться в системе транспортировки сообщений между подсистемами..

Пример имеющегося питон сценария:

# *************************************************************
# Разбор входящих переводов формата Z и H и преобразование
# их в формат XML для импорта в систему
# Формируется XML сообщение формы “ZH”, независимо от типа.
# Обработка сообщения в зависимости от типа осуществляется
# в процедуре импорта данного макета. Для импорта используется пакет M_PkgIEZH.
# Каждая строчка Z или H файла преобразуется в отдельное XML-сообщение.
# *************************************************************

from Colvir import *
import re
import cssutil
from string import split

fld = {}
fld = ‘FRMT’
# 03-телеграмма
# 05-обычный перевод на физическое или юридическое лицо
# 06-перевод для пополнения карт-счета
fld = ‘REFER’
fld = ‘MSGTYPE’
fld = ‘DEP’
fld = ‘PAY’
fld = ‘ACL’
fld = ‘KOD’
fld = ‘R_DEP’
fld = ‘R_NAMECR’
fld = ‘KBE’
fld = ‘R_ACR’
fld = ‘SUM’
fld = ‘KNP’
fld = ‘DORD’
fld = ‘VO’
# 1-перевод
# 2-возврат перевода
# 3-запрос по счету
# 4-отказ по запросу счета
# 5-предварительный запрос со счета
# 6-ответ на предварительный запрос со счета.
# 7-запрос со счета с последующим закрытием.
fld = ‘DSCR’
fld = ‘JURFL’
# 0-физическое лицо
# 1-юридическое лицо
fld = ‘VAL’
fld = ‘RNN_CL’
fld = ‘R_RNNCR’
fld = ‘PASSPORT_CL’
fld = ‘ADDRESS_CL’


packDS = inDs
frmt = packDS

msg = inDs

str_lst = re.findall('(?im)^.+$', msg)

outDs.clear()
outDs.addField('TRATTR', ftDataSet)
outDs.addField('BODY', ftString)


# формирование выходного XML-я.
import msxml2
import time

for ss in str_lst:
outDs.append()
sl = split(ss, ‘ю’)
sl = map(cssutil.ansistr, sl)
Doc = msxml2.DOMDocument()
root_node = Doc.createElement('MSG')
root_node.setAttribute('FORMAT', ‘ZH’) #frmt+sl)
root_node.setAttribute('SENDER', ‘RTL00’+sl)
root_node.setAttribute('RECIPIENT', ‘RTL00’+sl)
root_node.setAttribute('TIME', time.strftime('%Y.%m.%d %H:%M:%S', time.localtime(time.time())))
Doc.appendChild(root_node)

node = Doc.createElement('MEMBER')
root_node.appendChild(node)

for i in range(0, len(sl)-1):
if fld.has_key(i):
node.setAttribute(fld, sl)

# добавляем необходимое для LoadFromXML c_bsord-a
node.setAttribute('TUS', ‘AMANAT’)
node.setAttribute('ORD', ‘M_ORDINPAY’)
node.setAttribute('NN', ‘1’)
node.setAttribute('ZO', ‘0’)

attrDS = outDs
attrDS.append()
attrDS = frmt+sl
attrDS = ‘RTL00’+sl
attrDS = ‘RTL00’+sl
outDs = Doc.xml
del root_node
del Doc



Офлайн

#4 Ноя. 12, 2008 12:02:43

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

_Люди помогите с XML

Боже!!! Да зачем же так сложно!!!

#!/usr/bin/env python
import sys
from xml.sax.saxutils import escape

def clear(s):
return escape(s.strip()).replace('"', '&quot;')

outf = sys.stdout #перенаправте вывод в файл open('<имя файла>', 'w')
outf.write('<DATA>')
for s in open(sys.argv[1]):
outf.write('<RECORD DATE="%s" FIO="%s"/>' % tuple(clear(x) for x in s.split('|')))
outf.write('</DATA>')



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

Отредактировано (Ноя. 12, 2008 12:09:13)

Офлайн

#5 Ноя. 12, 2008 12:46:38

Vjn
От:
Зарегистрирован: 2008-11-12
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

_Люди помогите с XML

у меня на вход подаётся переменная msg со значением - данные текстового файла
msg = inDs

…и вот эту структуру на выходе надо оставить

attrDS = outDs
attrDS.append()
attrDS = frmt+sl
attrDS = ‘RTL00’+sl
attrDS = ‘RTL00’+sl
outDs = Doc.xml


то есть сообщение садится в БД не могу понять как мне переделать ваш пример.
Извиняюсь, но с Питоном впервые сталкиваюсь…



Офлайн

#6 Ноя. 12, 2008 13:17:26

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

_Люди помогите с XML

Ну, где-то так:

#до этого момента пропущено
# формирование выходного XML-я.
from xml.sax.saxutils import escape
from cStringIO import StringIO

def clear(s):
return escape(s.strip()).replace('"', '&quot;')

doc = StringIO()
doc.write('<DATA>')
for s in str_lst:
doc.write('<RECORD DATE="%s" FIO="%s"/>' % tuple(clear(x) for x in s.split('|')))
doc.write('</DATA>')

attrDS = outDs['TRATTR']
attrDS.append()
attrDS['FORMNAME'] = frmt+sl[0]
attrDS['SENDER'] = 'RTL00'+sl[3]
attrDS['RECIPIENT'] = 'RTL00'+sl[7]
outDs['BODY'] = doc.getvalue()
doc.close()
но вы не дали формат входного msg, а судя по коду он сложнее чем просто строки с данными.



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

Отредактировано (Ноя. 12, 2008 13:19:43)

Офлайн

#7 Ноя. 12, 2008 13:26:25

Vjn
От:
Зарегистрирован: 2008-11-12
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

_Люди помогите с XML

Что в предыдущем коде что в этом ругается на одну и ту же строку:
….
doc.write('<RECORD DATE=“%s” FIO=“%s”/>' % tuple(clear(x) for x in s.split('|')))
….
а именно на оператор “for”



Офлайн

#8 Ноя. 12, 2008 13:32:42

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

_Люди помогите с XML

Vjn
doc.write('<RECORD DATE=“%s” FIO=“%s”/>' % tuple([clear(x) for x in s.split('|')]))



Офлайн

#9 Ноя. 12, 2008 13:36:22

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

_Люди помогите с XML

Vjn
Что в предыдущем коде что в этом ругается на одну и ту же строку:
….
doc.write('<RECORD DATE=“%s” FIO=“%s”/>' % tuple(clear(x) for x in s.split('|')))
….
а именно на оператор “for”
Версия питона старовата, не понимает генераторы. Dimka665 правильно посоветовал



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

Офлайн

#10 Ноя. 12, 2008 13:39:45

Vjn
От:
Зарегистрирован: 2008-11-12
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

_Люди помогите с XML

Я и так пробовал - всё ровно не работает - та же ошибка…
кстати модуля “xml.sax.saxutils” у меня нет :(



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version