Форум сайта python.su
6
Привет ребят, подскажите пожалуйста.
Есть некий xml из которого забираю name user_id, беда в том, что есть плохие name и те которые обрабатывать не нужно.
как создать и применить список, который не будет обрабатываться при парсинге ?
что имею:
#!/usr/bin/env python # -*- coding: utf-8 -*- from xml.dom.minidom import * xml = parse('test.xml') name = xml.getElementsByTagName('user_id') for node in name: print node.childNodes[0].data.encode('utf-8')
Офлайн
72
Критерии “плохости” изложите. А, вообще, что мешает, когда идете по списку в for, делать проверку и пропускать ненужные?
Офлайн
6
PooHuser_id bad = ;$*asd@
Критерии “плохости” изложите. А, вообще, что мешает, когда идете по списку в for, делать проверку и пропускать ненужные?
Офлайн
72
for node in name: user_id = node.childNodes[0].data.encode('utf-8') if is_bad(user_id): continue print user_id
for node in name: user_id = node.childNodes[0].data.encode('utf-8') if not is_bad(user_id): print user_id
#!/usr/bin/env python # -*- coding: utf-8 -*- from xml.dom.minidom import * class IdTester(object): def __init__(self, filename): with open(filename) as inf: self.bad_ids = {s: True for s in inf.readlines()} def is_bad(self, key): return key in self.bad_ids xml = parse('test.xml') name = xml.getElementsByTagName('user_id') tester = IdTester('user_bad') for node in name: user_id = node.childNodes[0].data.encode('utf-8') if not tester.is_bad(user_id): print user_id
Отредактировано PooH (Июнь 19, 2015 17:25:40)
Офлайн
6
File "./unknow.py", line 8 self.bad_ids = {s: True for s in inf.readlines()}
Офлайн
72
Древний питон?, попробуйте так
self.bad_ids = dict(map(lambda x: (x, True), inf.readlines()))
Офлайн
857
PooHself.bad_ids = dict(map(lambda x: (x, True), inf.readlines()))
>>> dict.fromkeys('abc', True) {'c': True, 'b': True, 'a': True} >>>
Офлайн
72
py.user.nextуел :)
>>> dict.fromkeys('abc', True)
Офлайн
857
Надеюсь, readlines() тоже не будешь делать, так как файловый поток - сам по себе итератор.
>>> dict.fromkeys(open('/etc/issue'), True) {'\n': True, 'Fedora release 20 (Heisenbug)\n': True, 'Kernel \\r on an \\m (\\l)\n': True} >>>
Отредактировано py.user.next (Июнь 21, 2015 11:37:34)
Офлайн