Python XML随机赋值

时间:2016-02-18 10:51:23

标签: python xml

我正在尝试为XML密码标记分配一个随机值。

XML文件的示例。

<database>
 <group>
   <entry>
    <username>root</username>
    <password>XXXXXX</password>
   </entry>
   <entry>
    <username>root</username>
    <password>YYYYY</password>
   </entry>
 </group>
</database>

这是我目前的python代码

#!/usr/bin/python3.5

import xml.etree.ElementTree as ET
import random
import string

random = ''.join([random.choice(string.ascii_letters + string.digits + string.punctuation) for n in range(10)])

tree = ET.ElementTree(file='test2.xml')
root = tree.getroot()

for admin in root.findall("./group/entry/[username='root']"):
    password = admin.find('password').text = random
    print(password)

我得到了相同的随机值。我做错了什么?

2 个答案:

答案 0 :(得分:1)

您将第一个随机值分配给random变量,然后从未更改其值。

为了达到你想要的效果,你需要计算循环中的随机值:

for admin in root.findall("./group/entry/[username='root']"):
    password = ''.join([random.choice(string.ascii_letters + string.digits + string.punctuation) for n in range(10)])
    print(password)

旁注:在命名变量时应避免使用shadowing standard library modules

答案 1 :(得分:0)

您应该将随机值的生成移动到循环中,以便每次都生成新值。

#!/usr/bin/python3.5

import xml.etree.ElementTree as ET
import random
import string

tree = ET.ElementTree(file='test2.xml')
root = tree.getroot()
chars = string.ascii_letters + string.digits + string.punctuation

for admin in root.findall("./group/entry/[username='root']"):
    rand = ''.join([random.choice(chars) for n in range(10)])
    password = admin.find('password').text = rand
    print(password)

此外,在命名变量random时,您要覆盖导入的random包,这是不好的做法,请考虑将变量名更改为其他名称。