我正在尝试为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)
我得到了相同的随机值。我做错了什么?
答案 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
包,这是不好的做法,请考虑将变量名更改为其他名称。