代替许多 xml 文件中的数据

代替许多 xml 文件中的数据

我有很多具有特定结构的 xml 文件,例如

<Class>
    <Speed>25</Speed>
    <Price>3</Price>
</Class>

我想替换特定字段的值。我可以手动完成,但这会花费很多时间。

例如:我需要在所有文件中将速度设置为 100,将价格设置为 50。

我现在做的是打开每个文件,搜索 Speed,然后在那里手动输入 50 等等。这需要很多时间,所以我想知道是否有办法通过 Notepad++ 或其他软件自动完成。

提前致谢!

答案1

这是该脚本的递归版本。它修改给定目录及其所有子目录中文件的值。

import os
import re
my_dir = 'C:\\temp2\\my_folder\\'
replace_what = '(?<=<Speed>)(\d+)(?=<)'
replace_with = '100'
# loop through all files in directory recursively
for root, directories, filenames in os.walk(my_dir):
    for filename in filenames:
        if os.path.isfile(os.path.join(root,filename)):
            file = open(os.path.join(root,filename), 'r+')
            new_file_content=''
            for line in file:
                p = re.compile(replace_what)
                new_file_content += p.sub(replace_with, line)
            file.seek(0)
            file.truncate()
            file.write(new_file_content)
            file.close()

答案2

我认为你的例子中有一个拼写错误,并且你有<Speed>25</Speed>

  • Ctrl+F
  • 找什么:(?<=<Speed>)\d+(?=</Speed>)
  • 用。。。来代替:100
  • 检查环绕
  • 检查正则表达式
  • Replace all

解释:

(?<=<Speed>)    : lookbehind, zero-length assertion to make sure we have "<Speed>" before current position
\d+             : 1 or more digits
(?=</Speed>)    : lookahead, zero-length assertion to make sure we have "</Speed>" after current position

替代品:

100 : the new speed value

对价格执行相同操作,只需Speed按照Price上述说明进行替换即可。

答案3

您可以尝试使用 Python3.x 来实现此目的。我使用了 Python,因为它在许多平台上都可用。我在 Windows 和 Ubuntu 上测试了这个脚本。我没有发现任何问题。此代码片段更改了速度值,但可以随意修改变量 replace_what 以便它可以改变您的需要。

import os
import re
my_dir = 'C:\\temp2\\my_folder\\'
replace_what = '(?<=<Speed>)(\d+)(?=<)'
replace_with = '100'
# loop through all files in directory
for fn in os.listdir(my_dir):
    #print(fn)
    pathfn = os.path.join(my_dir,fn)
    if os.path.isfile(pathfn):
        file = open(pathfn, 'r+')
        new_file_content=''
        for line in file:
            p = re.compile(replace_what)
            new_file_content += p.sub(replace_with, line)
        file.seek(0)
        file.truncate()
        file.write(new_file_content)
        file.close()

相关内容