我有很多具有特定结构的 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()