wittempj <at> hotmail.com <martin.witte <at> gmail.com> writes:
> > If I do get this correct - you have files like \test\Mail\somename.msf > and \test\Mail\somedirectory\someothername.msf, these files you want to > move to \test\backup\timestamp\somename.msf and > \test\backup\timestamp\somedirectory\someothername.msf. > > In your code you start with collecting allfiles, and then you remove > all except *,msf files. You can do this in one step to, by collecting > only the wanted files in a listby applying the glob command from module > glob : > > allfiles = [] > for root, dirs, files in os.walk(top, topdown=False): > targetfiles = glob.glob(os.path.join(root,'*.msf')) > allfiles += targetfiles > > Now allfiles contains the list of .msf files down from directory > specified in variable top. From here I would create a list of 2-tuples, > with as first element the full original filename, and as second element > the desired backupname. Note that in your code you call the clock in a > for loop, this might result in more directories. > > backuproot = os.path.join(os.path.dirname(top), 'backup-msf', > time.strftime('%Y%m%d%H%M%S')) > backupfilenames = [] > for f in allfiles: > backupfilenames.append((f, os.path.join(backuproot, > os.path.basename(f)))) > > >From here it is easy to do the move. > Thanks so much for your help, you got me started and I finished it with some help from others as well. For anyone interested the working code is: -- #!/usr/bin/python #Author: Evan Carmi #Date: 20060102 #Purpose: To uncorrupt Mozilla Thunderbird mail index files. #Version: 1.00 import os, time, glob srcRoot = 'f:\\test\\mail' backupRoot = os.path.join(os.path.dirname(srcRoot), 'backup-msf', time.strftime('%Y%m%d%H%M%S')) for root, dirs, files in os.walk(srcRoot, topdown=False): sources = glob.glob(os.path.join(root,'*.msf')) pairs = [] for source in sources: # If srcRoot is /foo/bar and source is /foo/bar/baz, let relativeSource equal /baz #let relativeSource be equal to the remainder of source when you take away len(srcRoot) idx = len(srcRoot) relativeSource = source[idx:] # Then let destination equal /quux/baz if backupRoot is /quux destination = backupRoot + relativeSource # relativeSource begins with a path separator, so os.path.join will misinterpret it. pair = (source, destination) pairs.append(pair) for pair in pairs: os.renames(*pair) # This is functionally equivalent to os.renames(pair[0], pair[1]) -- Thanks, Evan -- http://mail.python.org/mailman/listinfo/python-list