sorting for recursive folder rename

ianaré ianare at gmail.com
Tue Dec 16 15:59:46 EST 2008


On Dec 16, 2:00 pm, MRAB <goo... at mrabarnett.plus.com> wrote:
> 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".

Thanks, this has been corrected.



More information about the Python-list mailing list