Thanks Kent! Bernard
On 9/12/05, Kent Johnson <[EMAIL PROTECTED]> 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@python.org > > http://mail.python.org/mailman/listinfo/tutor > > > > > > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor > _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor