Python脚本在第一次迭代后中断

时间:2015-10-12 16:24:35

标签: python elementtree

我正在尝试在python中执行以下操作。 使用用户名,pw,电子邮件地址等读取xml文件。然后我想迭代密码并尝试在不同的文件中找到它们。如果匹配,请输入用户名和密码。这就是我到目前为止所做的:

import xml.etree.ElementTree as ET

tag = "multiRef"


tree = ET.parse('user.xml')
pwlist = open('swapped.txt', 'r')

for dataset in tree.iter(tag):
    password = dataset.find("password")
    pw = password.text
    user = dataset.find("username").text
    if pw in pwlist.read():
        print user
        print pw

不幸的是,脚本只打印一个结果,最后没有错误或任何结果。我知道,必须至少有250个结果...... 为什么在一个结果后停止?绝对python newb,详细解释将非常感谢!

2 个答案:

答案 0 :(得分:1)

if pw in pwlist.read()不应该在循环中。第一次通过循环,read()将返回整个文件。第二次通过它将不会返回任何内容,因为您处于文件结束处。

在循环之前将内容读入列表,然后参考循环内的列表。

还要考虑模式with open(...) as f以确保关闭文件,因为我没有看到明确的close()。

with open('swapped.txt', 'r') as f:
   pw_list = f.readlines()

for ...

答案 1 :(得分:0)

错误是您在每次迭代时调用read。一次读取后,您必须调用.seek(0)来重置指针。然而,这不是最好的解决方案,所以你可能想尝试这样的事情:

import xml.etree.ElementTree as ET

tag = "multiRef"


tree = ET.parse('user.xml')
with open('swapped.txt', 'r') as fin:
    pwlist = fin.read()

for dataset in tree.iter(tag):
    password = dataset.find("password")
    pw = password.text
    user = dataset.find("username").text
    if pw in pwlist:
        print user
        print pw

这样您只能读取一次文件并在之后关闭它(使用context manager)。您可以在Python here中找到有关使用文件的更多信息。