Alan & Martin, Thanks for the feedback and suggestions. Kodos is a great tool. I use it regularly to debug my regex mistakes. It can also be a excellent learning tool to those unfamiliar with regular expressions. Thanks for the Python-LDAP link and ldif example code.
On 5/20/07, Martin Walsh <[EMAIL PROTECTED]> wrote:
Hi Tom, Tom Tucker wrote: > Why the cStringIO stuff? The input data shown below is collected from > os.popen. I was trying to find an easy way of matching my regex. Ah, ldap...
Oh yes,
Matching with a string seemed easier than looping through the ouput > collected. Hmm. Come to think of it, I guess I could match on the > first "^dn" catpure that output and then keep looping until "^cn:" is > seen. Then repeat. Honestly, I'm not very good with regular expressions -- and try to avoid them when possible. But in cases where they seem to be the best option, I have formed a heavy dependence on regex debuggers like kodos. http://kodos.sourceforge.net/
Kodos is an excellent regex tool. I use it regularly to verify regex strings.
Anyways, any suggestions to fix the below code? <snip> Have you had a look at the python-ldap package? http://python-ldap.sourceforge.net/
Thanks. I checked the Python module index page and You could probably access ldap directly with python, if that's an
option. Or, you could roll your own ldif parser (but make sure your data contains a newline between each dn, or the parser will choke with a 'ValueError: Two lines starting with dn: in one record.'): import ldif from cStringIO import StringIO class MyLDIF(ldif.LDIFParser): def __init__(self, inputfile): ldif.LDIFParser.__init__(self, inputfile) self.users = [] def handle(self, dn, entry): self.users.append((entry['uid'], entry['cn'])) raw = """\ <snip your ldif example with newlines added between dns> """ if __name__ == '__main__': io = StringIO(raw) lp = MyLDIF(io) lp.parse() for user in lp.users: uid = user[0][0] cn = user[1][0] print uid print cn ... or ... You could also use ldif.LDIFRecordList directly without creating a custom parser class which would return a list of (dn, entry) tuples. The module author warns that 'It can be a memory hog!', and I can imagine this is true if you are working with a particularly large ldap directory. io = StringIO(raw) directory = ldif.LDIFRecordList(io) directory.parse() for dn, entry in directory.all_records: print entry['uid'][0] print entry['cn'][0] _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor