根据条件更改标签值

change value of tag respecting conditions

我想读取 csv 文件。

第一列指tag source,第二列指value source,第三列指target value改变。最后一列指的是 tag name 已更改。

请问我怎样才能动态地做到这一点?

 Types1, Init, INITIAL, Type1

 Types1, inits, INITIAL, Type1

 Types2, ANNULE, delayed, Type2

 Types3, Topp, high, Type3

 Types3, best, TOP, Type3

输入样本

<data>
  <db1>
    <Types1> Init </Types1>
    <Types1> inits </Types1>
    <Types3> best </Types3>
  </db1>
  <db1>
    <Types2> ANNULE </Types2>
    <Types3> Topp </Types3>
    <Types3> best </Types3>
  </db1>   
<data>

预期输出

<data>
  <db1>
    <Type1> INITIAL </Type1>
    <Type1> INITIAL </Type1>
    <Type3> TOP </Type3>
  </db1>
  <db1>
    <Type2> delayed </Type2>
    <Type3> high </Type3>
    <Type3> TOP </Type3>
  </db1>   

对于如下的 csv 数据:

您需要使用 pandas 来管理 csv 和 ElementTree 来管理 xml 文件。

import xml.etree.ElementTree
import pandas as pd

df = pd.read_csv('data.csv')
root = xml.etree.ElementTree.parse('data.xml')

for tag in df['tag'].unique():
    for item in root.iter(tag):
        text = item.text.strip()
        data_row = df[(df['tag']==tag) & (df['old']==text)]
        item.text = data_row['new'].values[0]

root.write('file_new.xml')

输出:

<data>
  <db1>
    <Types1>INITIAL</Types1>
    <Types1>INITIAL</Types1>
    <Types3> best </Types3>
  </db1>
  <db1>
    <Types2>delayed</Types2>
    <Types3> Topp </Types3>
    <Types3> best </Types3>
  </db1>   
</data>