On 12/09/2012 07:52 PM, Victor Hooi wrote: > Hi, > > I'm getting a strange error when I try to run the following: > > for root, dirs, files in os.walk('./'): > for file in files: > if file.startswith('ml') and file.endswith('.xml') and 'entity' > not in file: > print(root) > print(file) > with open(os.path.join(root, file), 'r') as f: > print(f.name) > try: > tree = etree.parse(f) > root = tree.getroot() > print(f.name) > print(root.tag) > except xml.parsers.expat.ExpatError as e: > print('Unable to parse file {0} - {1}'.format(f.name, > e.message)) >
Where's the printout of the root and file variables? You're asking os.path.join to work on them, and it's clearly upset about their types. I see print statements, so you clearly were thinking along these lines. But you don't show them. BTW, I'd be using print(repr(root)) and print(repr(file)) instead, so you get a better idea of their type and value. My guess for the problem is that you're trashing 'root' with the contents of your try block. Try using a different name for the xml stuff. > The error is: > > Traceback (most recent call last): > File "foo.py", line 275, in <module> > marketlink_configfiles() > File "foo.py", line 83, in bar > with open(os.path.join(root, file), 'r') as f: > File "C:\Python27\lib\ntpath.py", line 97, in join > if path[-1] in "/\\": > TypeError: 'in <string>' requires string as left operand, not Element > > Cheers, > Victor Incidentally, 'file' is a builtin type, so it's probably not a good idea to hide it by using it as your own local variable. -- DaveA -- http://mail.python.org/mailman/listinfo/python-list