2016-12-01 7 views
0

Я немного работал с библиотекой xml.etree.ElementTree python, в основном играя с ним. Я заметил, однако, что python, похоже, загружает файл в память и редактирует его там, затем очищает и продолжает использовать неотредактированную версию. Например, если моя программа добавляет элемент в файл XML, а затем итерации через этот XML-файл, он не увидит добавление, которое было сделано ранее.Обновление файла в ElementTree Python

Вот сокращенный вариант моего кода:

для добавления в файл:

import xml.etree.ElementTree as ET 
tree = et.parse("file.xml") 
root = tree.getroot() 
newel = ET.Element("element", tag=foo,) 
newel.text = bar 
root.append(newel) 
tree.write("file.xml") 
for child in root: 
     if child.get("tag") == foo: 
      print(child.text) 

Я делаю что-то не так, или что это хороший способ «освежающий», так сказать, XML-файл в программе, поэтому, когда я повторяю программу с циклом for, я могу видеть мой новый элемент?

Я использую python 3.5.

+0

Я видел [это] (HTTP://stackoverflow.com/questions/27829575/python-refresh-file-from-disk), но он, похоже, не применяется. – prongs95

ответ

0

Это не имеет никакого отношения к освежению или промывке. Подпись конструктора элемента заключается в следующем:

__init__(self, tag, attrib={}, **extra) 

Вы передаете в tag в качестве именованного аргумента в дополнении к неявно указав его в качестве "element". Предполагая, что вы хотите tag быть атрибутом элемента (на основании того, как вы пытаетесь получить его с Element.get), должно работать (с некоторыми дополнительными поправками):

foo = "foo" 
bar = "bar" 

import xml.etree.ElementTree as ET 
tree = ET.parse("file.xml") 
root = tree.getroot() 
newel = ET.Element("element", {"tag": foo}) 
newel.text = bar 
root.append(newel) 
tree.write("file.xml") 
for child in root: 
     if child.get("tag") == foo: 
      print(child.text) 
+0

Это проясняет ситуацию. Благодаря! – prongs95

 Смежные вопросы

  • Нет связанных вопросов^_^