On Tue, 27 Feb 2007 20:31:43 -0800, Scott David Daniels wrote: >> def findallfiles(self, base): >> self.results = [] >> for root,dirs,files in os.walk(base): >> os.chdir(root) > ^^^ Mistake here, don't change directories during os.walk ^^^
I came across this problem some time ago. I had to walk a directory tree, calling an external program on each file. Unfortunately, that external program wrote directly to the current working directory, which caused all sorts of havoc. This is how I dealt with it: def unbin(where): """Walk through a directory tree, calling macunpack to extract the contents of MacBinary files. """ def _unbin(data, dirname, files): for oldname in files: fullname = os.path.normpath(os.path.join(dirname, oldname)) if os.path.isfile(fullname): # Dammit, macunpack writes directly to the current # working directory. Changing the cwd breaks the file # tree walker, so we have to remember the current # directory, change it to where we want to be, then # change it back. wd = os.getcwd() os.chdir(dirname) result = os.system('macunpack -f "%s"' % oldname) if result == 0: # Unpacking worked, so delete the original. os.remove(oldname) os.chdir(wd) # sigh... os.path.walk(where, _unbin, None) Is there another (better) way of dealing with this sort of situation? -- Steven D'Aprano -- http://mail.python.org/mailman/listinfo/python-list