sorting for recursive folder rename

MRAB google at mrabarnett.plus.com
Tue Dec 16 20:00:20 CET 2008


ianaré wrote:
> Hello all,
> 
> I trying to recursively rename folders and files, and am looking for
> some ideas on the best way of doing this. The problem is that the
> given list of items can be in order, and one to all items may be
> renamed. Here is some preliminary code I have, but which does not work
> very well.
> 
> self.toRename has the following structure :
> [
> [original_name, new_name, os.path.isdir]
> ..
> ]
> 
> # define these here for faster processing
> def split(item):
>     return os.path.split(item)
> def addSep(path):
>     return os.sep + path + os.sep
> def recursiveFolderSort(x,y):
>     return cmp(y[0], x[0])
> 
> sortedRename = sorted(self.toRename)
> 
> # make a list of all folders that will be processed
> foldersToAdjust = []
> for item in sortedRename:
>     if item[2] is False:
      if not item[2]:
>         oF = split(item[0])[1] # original folder name
>         nF = split(item[1])[1] # new folder name
>         if oF is not nF:
          if oF != nF:
>             foldersToAdjust.append((oF, nF))
> 
> # replace all occurences of folders in path
> for i in range(len(self.toRename)):
>     for f in foldersToAdjust:
>         oF = addSep(f[0]) # original folder name
>         nF = addSep(f[1]) # new folder name
>         self.toRename[i][0] = self.toRename[i][0].replace(oF,nF)
>         self.toRename[i][1] = self.toRename[i][1].replace(oF,nF)
> 
>     if progressDialog.update(i) is False:
      if not progressDialog.update(i):
>         error = 'cancelled'
>         break
> 
> # make sure renaming will be in correct order !
> self.toRename.sort(recursiveFolderSort)
> 
> 
> 
> First problem is adjusting the paths can take a very long time.
> Second problem is sorting is not always right and files get lost !!
> Any input welcome.
> 
You should use "is" and "is not" _only_ when checking for _identity, ie 
are these 2 both references to the _same_ object. Most of the time that 
would be "x is None" or "x is not None".



More information about the Python-list mailing list