【问题标题】:Python: Writing list to xml filePython:将列表写入xml文件
【发布时间】:2018-05-11 12:14:51
【问题描述】:

我正在尝试将列表元素写入 xml 文件。我写了下面的代码。 xml 文件已创建,但数据重复。我无法弄清楚为什么数据在 xml 文件中写入了两次。

users_list = ['Group1User1', 'Group1User2', 'Group2User1', 'Group2User2']
def create_xml(self):
    usrconfig = Element("usrconfig")
    usrconfig = ET.SubElement(usrconfig,"usrconfig")
    for user in range(len( users_list)):
        usr = ET.SubElement(usrconfig,"usr")
        usr.text = str(users_list[user])
    usrconfig.extend(usrconfig)
    tree = ET.ElementTree(usrconfig)
    tree.write("details.xml",encoding='utf-8', xml_declaration=True)

输出文件:details.xml

-

<usr>Group1User1</usr>

<usr>Group1User2</usr>

<usr>Group2User1</usr>

<usr>Group2User2</usr>

<usr>Group1User1</usr>

<usr>Group1User2</usr>

<usr>Group2User1</usr>

<usr>Group2User2</usr>

enter image description here

【问题讨论】:

  • 我觉得这个包对你有用xmljson

标签: python xml


【解决方案1】:
usrconfig.extend(usrconfig)

这条线在我看来很可疑。如果userconfig 是一个列表,则此行相当于“复制此列表中的每个元素”。我怀疑 Elements 也会发生类似的事情。尝试删除该行。

import xml.etree.ElementTree as ET

users_list = ["Group1User1", "Group1User2", "Group2User1", "Group2User2"]

def create_xml():
        usrconfig = ET.Element("usrconfig")
        usrconfig = ET.SubElement(usrconfig,"usrconfig")
        for user in range(len( users_list)):
                usr = ET.SubElement(usrconfig,"usr")
                usr.text = str(users_list[user])
        tree = ET.ElementTree(usrconfig)
        tree.write("details.xml",encoding='utf-8', xml_declaration=True)

create_xml()

结果:

<?xml version='1.0' encoding='utf-8'?>
<usrconfig>
<usr>Group1User1</usr>
<usr>Group1User2</usr>
<usr>Group2User1</usr>
<usr>Group2User2</usr>
</usrconfig>

【讨论】:

  • usrconfig.extend(usrconfig) 导致了这个问题。删除此行解决了问题。
【解决方案2】:

对于这么简单的xml结构,我们可以直接写出文件。但是,如果一个人没有跟上 python xml 模块的速度,这种技术也可能很有用。

import os

users_list = ["Group1User1", "Group1User2", "Group2User1", "Group2User2"]
os.chdir("C:\\Users\\Mike\\Desktop")
xml_out_DD = open("test.xml", 'wb')
xml_out_DD.write(bytes('<usrconfig>', 'utf-8'))
for i in range(0, len(users_list)):
    xml_out_DD.write(bytes('<usr>'  + users_list[i] + '</usr>', 'utf-8'))
xml_out_DD.write(bytes('</usrconfig>', 'utf-8'))
xml_out_DD.close()

【讨论】:

    猜你喜欢
    • 2015-05-29
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2017-05-21
    相关资源
    最近更新 更多