Редактировать текст XML-файла на основе пути
У меня есть файл XML (например, jerry.xml), который содержит некоторые данные, как указано ниже.
<data>
<country name="Peru">
<rank updated="yes">2</rank>
<language>english</language>
<currency>1.21$/kg</currency>
<gdppc month="06">141100</gdppc>
<gdpnp month="10">2.304e+0150</gdpnp>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<language>english</language>
<currency>4.1$/kg</currency>
<gdppc month="05">59900</gdppc>
<gdpnp month="08">1.9e-015</gdpnp>
<neighbor name="Malaysia" direction="N"/>
</country>
Я извлек полные пути некоторых выбранных текстов из XML выше, используя код ниже. Причины приведены в этомсообщение.
def extractNumbers(path, node):
nums = []
if 'month' in node.attrib:
if node.attrib['month'] in ['05', '06']:
return nums
path += '/' + node.tag
if 'name' in node.keys():
path += '=' + node.attrib['name']
elif 'year' in node.keys():
path += ' ' + 'month' + '=' + node.attrib['month']
try:
num = float(node.text)
nums.append( (path, num) )
except (ValueError, TypeError):
pass
for e in list(node):
nums.extend( extractNumbers(path, e) )
return nums
tree = ET.parse('jerry.xml')
nums = extractNumbers('', tree.getroot())
print len(nums)
print nums
Это дает мне расположение элементов, которые мне нужно изменить, как показано в колонке 1 csv ниже (например, hrong.csv).
Path Text1 Text2 Text3 Text4 Text5
'/data/country name=singapore/gdpnp month=08'; 5.2e-015; 2e-05; 8e-06; 9e-04; 0.4e-05;
'/data/country name=peru/gdppc month=06'; 0.04; 0.02; 0.15; 3.24; 0.98;
Я хотел бы заменить текст элементов исходного XML-файла (jerry.xml) на элементы в столбце 2 файла hrong.csv выше в зависимости от расположения элементов в столбце 1.
Я новичок в Python и понимаю, что, возможно, я не использую лучший подход. Я был бы признателен за любую помощь в отношении направления по этому вопросу. Мне в основном нужно проанализировать только некоторые выбранные текстовые узлы XML-файла, изменить выбранные текстовые узлы и сохранить каждый файл.
Спасибо