[Tutor] Partly OT: order of renaming files and directories

Bernard Lebel 3dbernard at gmail.com
Mon Sep 12 17:23:44 CEST 2005


Thanks Kent!

Bernard


On 9/12/05, Kent Johnson <kent37 at tds.net> wrote:
> Bernard Lebel wrote:
> > Hello,
> >
> > I'm creating a script that will rename directories and files (hence
> > the regular expression thing I asked about last week). I just wanted
> > to ask if there is a recommended order to rename stuff, because I want
> > to avoid any potential problem.
> >
> > What I mean:
> > I traverse some areas of the file server with os.walk(). If I want to
> > rename a directory, is it better that I rename the directory curretly
> > being visited, or should I iterate the files and directories in the
> > current directory and rename them instead?
> 
> Assuming you are going to actually rename the directories on disk (the code below just changes the names in a local string) I don't think the second approach will work as written. The list of directories yielded by os.walk() can be changed in the client to affect which sub-directories are iterated. From the docs on os.walk():
> 
> "...the caller can modify the dirnames list in-place (perhaps using del or slice assignment), and walk() will only recurse into the subdirectories whose names remain in dirnames; this can be used to prune the search, impose a specific order of visiting, or even to inform walk() about directories the caller creates or renames before it resumes walk() again."
> 
> So the list of dirnames is the list that will be attempted in the recursive step; if you rename them without updating dirnames the renamed subdir will not be found. At least that is how I read it; you could easily test this by trying it and looking at the log.
> 
> So I would do the first method. If you want to use the second approach I think you will have to modify dirnames as well as renaming the file on disk.
> 
> Kent
> >
> > To summarize.
> >
> > Renaming the current directory:
> >
> >
> > # Iterate roots
> > for sRoot in aRoots:
> >
> >       print '\nWalking root %s...\n' % sRoot
> >
> >       # Walk-down root
> >       for sDir, aDirs, aFiles in os.walk( sRoot, True ):
> >
> >               sNewDir = oReL.sub( r'\g<1>0\2', sDir )
> >               if sNewDir != sSubDir: print '%s changed to %s' % (sDir, sNewDir)
> >               else:
> >                       sNewDir = oReQ.sub( r'\g<1>0\2', sDir )
> >                       if sNewDir != sSubDir: print '%s changed to %s ' % (sDir, sNewDir)
> >
> >       print 'Root %s DONE.' % sRoot
> >
> >
> >
> > Renaming the content of the current directory:
> >
> >
> > # Iterate roots
> > for sRoot in aRoots:
> >
> >       print '\nWalking root %s...\n' % sRoot
> >
> >       # Walk-down root
> >       for sDir, aDirs, aFiles in os.walk( sRoot, True ):
> >
> >               for sSubDir in aDirs:
> >                       sNewSubDir = oReL.sub( r'\g<1>0\2', sSubDir )
> >                       if sNewSubDir != sSubDir: print '%s changed to %s' % (sSubDir, sNewSubDir)
> >                       else:
> >                               sNewSubDir = oReQ.sub( r'\g<1>0\2', sSubDir )
> >                               if sNewSubDir != sSubDir: print '%s changed to %s ' % (sSubDir, sNewSubDir)
> >
> >       print 'Root %s DONE.' % sRoot
> >
> >
> > Thanks
> > Bernard
> > _______________________________________________
> > Tutor maillist  -  Tutor at python.org
> > http://mail.python.org/mailman/listinfo/tutor
> >
> >
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list