Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
import sys
sys.getsizeof(tree)вы опубликовали код который будет прочитан кучей людей, потратьте время на его причесывания.
общий except зло, а в вашем случае, скорее всего должно быть что-то типа get для словарей
А то есть остальное это ОК? То есть написать что-то типа
words = ['IFNSFL', 'IFNSUL' ... ]
for w in words:
object.append(member.attrib[w] if w in member.attrib else None)Это куда хуже, чем такой замечательный код, как у вас?
Ну значит кормить блоками некоторой длины :)
Про условия — пожалуй нечестно сравнивать
Не уверен, что это будет работать быстрее
Остается сожалеть, что данное достоинство не применимо к БД ФИАС, так как требуется предварительная работа с кодировками.
Считаете, что для этого надо дробить при кормлении? Лишние условия для проверки увеличат время работы.
И как по частям кормить DOM
def parse(source, parser=None):
"""Parse XML document into element tree.
*source* is a filename or file object containing XML data,
*parser* is an optional parser instance defaulting to XMLParser.
Return an ElementTree instance.
"""
tree = ElementTree()
tree.parse(source, parser)
return tree def parse(self, source, parser=None):
"""Load external XML document into element tree.
*source* is a file name or file object, *parser* is an optional parser
instance that defaults to XMLParser.
ParseError is raised if the parser fails to parse the document.
Returns the root element of the given source document.
"""
close_source = False
if not hasattr(source, "read"):
source = open(source, "rb")
close_source = True
try:
if parser is None:
# If no parser was specified, create a default XMLParser
parser = XMLParser()
if hasattr(parser, '_parse_whole'):
# The default XMLParser, when it comes from an accelerator,
# can define an internal _parse_whole API for efficiency.
# It can be used to parse the whole source without feeding
# it with chunks.
self._root = parser._parse_whole(source)
return self._root
while True:
data = source.read(65536)
if not data:
break
parser.feed(data)
self._root = parser.close()
return self._root
finally:
if close_source:
source.close()
attr_names = [
'HOUSEID', 'HOUSEGUID', 'AOGUID', 'HOUSENUM', 'STRUCNUM',
'STRSTATUS', 'ESTSTATUS', 'STATSTATUS', 'IFNSFL', 'IFNSUL',
'TERRIFNSFL', 'TERRIFNSUL', 'OKATO', 'OKTMO', 'POSTALCODE',
'STARTDATE', 'ENDDATE', 'UPDATEDATE', 'COUNTER', 'NORMDOC',
'DIVTYPE', 'REGIONCODE'
]
for attr_name in attr_names:
object.append(member.attrib.get(attr_name, None))
SAX-парсер python vs DOM-парсер python. Парсим ФИАС-houses