def walk_tree(top = ".", depth_first = True): """Walk the directory tree, starting from top. Credit to Noah Spurrier and Doug Fort.""" names = os.listdir(os.path.join(top)) if not depth_first: yield top, names for name in names: try: file = os.path.join(top, name) st = os.lstat(file) except os.error: continue if stat.S_ISDIR(st.st_mode): for (newtop, children) in walk_tree(os.path.join(top, name), depth_first): yield newtop, children if depth_first: yield top, names stack trace: Traceback (most recent call last): File "index_music2.py", line 185, in ? print ''.join([ '', File "index_music2.py", line 85, in scan_armoury for top, names in walk_tree(path_base): File "index_music2.py", line 41, in walk_tree for (newtop, children) in walk_tree(os.path.join(top, name), depth_first): File "index_music2.py", line 35, in walk_tree file = os.path.join(top, name) File "/usr/local/lib/python2.4/posixpath.py", line 65, in join path += '/' + b UnicodeDecodeError: 'ascii' codec can't decode byte 0xf6 in position 7: ordinal not in range(128)