[Tutor] elementtree, lists, and dictionaries
Kent Johnson
kent37 at tds.net
Sat Feb 12 04:28:55 CET 2005
If you iterate over the author nodes you can check the user name and password of each in turn.
Not tested code!
def authenticateAuthor(author, password):
authorxml = 'author.xml'
path = os.path.join(xml, authorxml)
if not os.path.exists(path):
return False, False
else:
tree = E.ElementTree(file=path)
for authorNode in tree.getiterator('author'):
user = authorNode.find('user').text
pass = authorNode.find('password').text
if author == user:
if password == pass:
return True, True
else:
return False, True
return False, True
Luis N wrote:
> Hi,
>
> This code works, but I don't like it much:
>
> def authenticateAuthor(author, password):
> authorxml = 'author.xml'
> path = os.path.join(xml, authorxml)
> try: if not os.path.exists(path):
> authorfile = False
> else:
> authorfile = True
> tree = E.ElementTree(file=path)
> u = tree.getiterator('user')
> p = tree.getiterator('password')
Here you could say
d = dict( (unode.text, pnode.text) for unode, pnode in zip(u, p))
> ul = []
> pl = []
> for unode in u:
> ul.append(unode.text)
> for pnode in p:
> pl.append(pnode.text)
> d = {}
> for i in range(len(ul)):
> d[ul[i]] = pl[i]
> if d.has_key(author):
> if d.get(author) == password:
> auth = True
> else:
> auth = False
or
try:
if d[author] == password:
auth = True
except KeyError:
auth = False
or, if you are sure password will not be None, just skip the has_key():
if d.get(author) == password:
...
(I hate using has_key() followed by a get()...
> return auth, authorfile
>
> It assumes a great deal, such as that there is no chance that there
> will be more users then there are passwords, etc. given an xml
> document format such as:
>
> <root>
> <author>
> <user>authorname</user>
> <password>authorpassword</password>
> </author>
> </root>
>
> I don't like how I'm making two lists and then turning them into a
> dictionary. It seems unpythonic.
>
> Suggestions are appreciated.
> _______________________________________________
> Tutor maillist - Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>
More information about the Tutor
mailing list