Мне нужно обработать большой XML-документ, для которого у меня есть несколько задач по очистке и обработке данных.Обработка таймера и XML-файлов
Базовый код, приведенный ниже, используется xml.etree.ElementTree
. Поскольку файл очень большой (около 2 ГБ), я хотел бы иметь возможность регулярно печатать значение переменной аккумулятора tagCounts
.
Каков самый чистый способ реализовать таймер, используя ElementTree
печать каждые 3 минуты содержимого self.tagCounts
?
Благодаря
import xml.etree.ElementTree as ET
import pprint
class TagCounter:
def __init__(self):
self.tagCounts = {}
def start(self, tag, attrib):
if tag in self.tagCounts:
self.tagCounts[tag] += 1
else:
self.tagCounts[tag] = 1
def end(self, tag):
pass
def data(self, data):
pass
def close(self):
return self.tagCounts
def count_tags(filename):
parser = ET.XMLParser(target = TagCounter())
with open(filename, mode='r') as f:
for line in f:
parser.feed(line)
t = parser.close()
return t
if __name__ == "__main__":
tags = count_tags("file.osm")
pprint.pprint(tags)
спасибо @ j-f-sebastian за ваш ответ, к сожалению, это немного запутывает меня, реализация «ElementTree» в моем примере - это подход, основанный на событиях, из-за большого размера файла. Моя идея - регулярно печатать журнал на консоли, я не понимаю, как ваш код может мне помочь. Могу ли я попросить вас уточнить немного больше? Ваше предложение было бы окончательно полезным в случае разбора, основанного не на событии. – Michael
@Michael: Я обновил ответ, чтобы показать, что код переходит в * ваш * 'класс TagCounter' – jfs