Форум сайта python.su
evp24как-то так:
а как?
# coding: utf-8 import re import sqlite3 import lxml.etree as ET from datetime import datetime from itertools import count NAME = re.compile(ur'([\w-]+)\s+([\w-]+)\s*([\w\s-]*)', re.I + re.U) def data_iter(root): for item in root.iter('item'): yield {i.tag: i.text for i in item} def name_split(name): fam, im, ot = NAME.match(name.upper()).groups() return fam, im, ot class _Database(object): def __init__(self): self.con = sqlite3.connect('data.db') self.cur = self.con.cursor() self.cur.execute( '''CREATE TABLE IF NOT EXISTS "patient" ( `id` INTEGER, `n5` TEXT, `n6` TEXT, `fam` TEXT, `im` TEXT, `ot` TEXT, `drd` DATE, `drdy` TEXT, `lnkd` DATE, `smo_cod` INTEGER, PRIMARY KEY(`id`) )''') self.cur.execute('CREATE INDEX IF NOT EXISTS `ix_patient_drd` ON `patient` (`drd` )') self.cur.execute('CREATE INDEX IF NOT EXISTS `ix_patient_drdy` ON `patient` (`drdy` )') self.cur.execute('CREATE INDEX IF NOT EXISTS `ix_patient_fam` ON `patient` (`fam` )') self.cur.execute('CREATE INDEX IF NOT EXISTS `ix_patient_im` ON `patient` (`im` )') self.cur.execute('CREATE INDEX IF NOT EXISTS `ix_patient_n6` ON `patient` (`n6` )') self.cur.execute('CREATE INDEX IF NOT EXISTS `ix_patient_ot` ON `patient` (`ot` )') self.cur.execute('CREATE UNIQUE INDEX IF NOT EXISTS `ix_patient_primary_key` ON `patient` (`id` )') self.cur.execute('DELETE FROM `patient`') def append(self, rec): self.cur.execute("insert into `patient` values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", rec) def close(self): self.con.commit() self.cur.close() def main(name): db = _Database() tree = ET.parse(name) root = tree.getroot() counter = count(1) for item in data_iter(root): fam, im, ot = name_split(item['attr_84896_']) dr = datetime.strptime(item['attr_84891_'], '%d.%m.%Y').date() dl = datetime.strptime(item['attr_84913_'], '%d.%m.%Y').date() db.append([ counter.next(), '', item['attr_84895_'], fam, im, ot, dr, str(dr.year), dl, 0, ]) db.close() if __name__ == '__main__': main('data.xml')
evp24На воду дуете.
от WINDOWS отказался
Отредактировано Shaman (Июль 19, 2017 09:14:24)
Офлайн
evp241. Надо понять сколько у вас данных. 100ТБ и 10 МБ требуют разных подходов. У меня сложилось мнение что данных у вас кот наплакал. Приведенный у вас файл с товарами в xml пара мегабайт. В этом случае проще вообще все данные затащить в память (если вам конечно не требуются продвинутые sql запросы). Если я ошибаюсь то последующие действия могут быть другими
а как?
Офлайн
doza_and
Надо понять сколько у вас данных. 100ТБ и 10 МБ
doza_and
Считываете данные из ваших xml при помощи пакета lxml или еще чего. - получаете dom.
doza_and
не увидел как можно определить что на складе что в остатке и т.п. будьте готовы к тому что ничего полезного из этой затеи не выйдет.
Отредактировано evp24 (Июль 19, 2017 11:13:49)
Офлайн
Shaman
как-то так:
[code ini]
~$ pip install sqlite3
Collecting sqlite3
Downloading sqlite3-99.0.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-z8SdZJ/sqlite3/setup.py", line 2, in <module>
raise RuntimeError("Package 'sqlite3' must not be downloaded from pypi")
RuntimeError: Package 'sqlite3' must not be downloaded from pypi
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-z8SdZJ/sqlite3/
[/code]
Офлайн
evp24
а вы пробовали импортировать этот пакет? Не помню, чтобы мне хоть раз приходилось его устанавливать, он всегда шел с питоном по умолчанию.
Офлайн
FishHook
evp24а вы пробовали импортировать этот пакет? Не помню, чтобы мне хоть раз приходилось его устанавливать, он всегда шел с питоном по умолчанию.
File "/home/irip/test/py/PY/setup.py", line 9
NAME = re.compile(ur'([\w-]+)\s+([\w-]+)\s*([\w\s-]*)', re.I + re.U)
^
SyntaxError: invalid syntax
Офлайн
evp24Ну и при чем тут sqlite3 вообще?
Если делаю через python 3.5 выдает это
Офлайн
evp24Пример на python2, который я обычно использую. Применение его как есть Вам точно не нужно.
Если делаю через python 3.5 выдает это
Офлайн
evp24что именно?
Пробовал по этому примеру. Не получилось
from lxml import etree def get_node(node): print(node.tag,node.attrib,node.text) for n in node: get_node(n) tree = etree.parse('DBSchema.xml') get_node(tree.getroot())
Отредактировано vic57 (Июль 19, 2017 14:11:26)
Офлайн
vic57
выхлоп покажите
Traceback (most recent call last):
File "/home/irip/test/py/xml/setup.py", line 1, in <module>
from lxml import etree
ImportError: No module named lxml
Прикреплённый файлы:
result_1 (55,4 KБ)
Офлайн