我发现了几个类似的问题,但没有一个完全达到我的目标,我绑定在XML文件中编辑多行。我对脚本的了解充其量是非常基本的,所以请包括一些我的基本大脑会理解的细节
我试图转换这个
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel update="i" site="openwebif" site_id="1:0:1:D32E:836:2:11A0000:0:0:0:" xmltv_id="&TV">&TV</channel>
<channel update="i" site="openwebif" site_id="1:0:1:2F17:7EF:2:11A0000:0:0:0:" xmltv_id="4Music">4Music</channel>
<channel update="i" site="openwebif" site_id="1:0:1:5302:814:2:11A0000:0:0:0:" xmltv_id="4seven">4seven</channel>
进入这个
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<!-- vermin --><channel id="&TV">1:0:1:D32E:836:2:11A0000:0:0:0:</channel><!-- VM -->
<!-- vermin --><channel id="4Music">1:0:1:2F17:7EF:2:11A0000:0:0:0:</channel><!-- VM -->
<!-- vermin --><channel id="4seven">1:0:1:5302:814:2:11A0000:0:0:0:</channel><!-- VM -->
我什至不确定什么最有效?这可以用蟒蛇完成吗?批?
蒂亚
import re
# Open the xml file.
with open('test1.xml', encoding='utf-8') as r:
# Read the file contents whole.
content = r.read()
# Do replacements using regex.
content = re.sub(r'^s*(<channel)s+.*?s+site_id="(.*?)"s+xmltv_id="(.*?)">.*?(</channel>)',
r'<!-- vermin -->1 id="3">24<!-- VM -->', content, 0, re.I + re.M)
# Open and write the changed xml file.
with open('test2.xml', 'w', encoding='utf-8') as w:
w.write(content)
由于您在问题摘要中提到了Python,因此使用了Python 3。
这是使用正则表达式来修改 XML。 如果 XML 具有合理的常量结构,如发布的示例, 那么这可能符合您的目标。
读取test1.xml
并使用 带有re.sub()
的正则表达式模式。
test2.xml
是应用了更改的 XML 文件。
这两个文件都被视为utf-8
。
阅读有关re
模块的 Python 帮助文件。
所用正则表达式的简要概述。
^
匹配行的开头。s
匹配空格字符。*
匹配 0 个或多个以前的模式|字符。+
匹配 1 个或多个以前的模式|字符。(.*?)
捕捉任何角色作为一个不贪婪的群体。1
是第一组作为替补。2
是第二组...re.I
是不敏感的标志。re.M
是多行标志,因此可以使用行锚点^
和$
。
建议您阅读 Python 帮助文件,因为它更多 全面的学习。