On Dec 16 2008, 7:36 pm, "Rhodri James" <rho...@wildebst.demon.co.uk> wrote: > On Tue, 16 Dec 2008 18:20:52 -0000, ianaré <ian...@gmail.com> wrote: > > Hello all, > > > I trying to recursivelyrenamefolders 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: oF = split(item[0])[1] # original folder name nF = split(item[1])[1] # new folder name if oF is not 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: error = 'cancelled' break # make sure renaming will be in correct order ! self.toRename.sort(recursiveFolderSort) > import os > > for item in self.toRename: > os.renames(item[0], item[1]) > > That's it. os.renames will take care of all the intermediate > directory creation so you don't even need to sort the list. > > -- > Rhodri James *-* Wildebeeste Herder to the Masses It's been a while since I decided to work on this again ... Anyway, if only it were that easy !! Traceback (most recent call last): File "/home/ianare/Desktop/file-folder-ren/metamorphose2/Source/ MainWindow.py", line 1477, in renameItems os.renames(original[0], renamed[0]) File "/usr/lib/python2.5/os.py", line 213, in renames rename(old, new) OSError: [Errno 2] No such file or directory The problem is that if a directory is changed, all lower instances need to be changed as well. given the following directory structure ... recursive | |_1 | |_1 | | |_1.txt | | |_2.txt | |_2 | |_1.txt | |_2.txt |_2 |_1 | |_1.txt | |_2.txt |_2 |_1.txt |_2.txt ... and assuming I want to change : recursive/2/2/2.txt --> recursive/2/2/14.txt but, I ALSO want to change : recursive/2 --> recursive/04 it means that the first operation is really : recursive/04/2/2.txt --> recursive/04/2/14.txt os.renames will work, but it needs to have the correct path, so it comes down to the same thing. IOW, I need a way of : A) adjusting paths taking into consideration all changes up and down the tree B) sorting normalized paths so they are renamed in the proper sequence (depends on point 'A', obviously) I'm pretty sure I can take care of 'B' with the following sorting method: # order by path depth def recursiveFolderSort(x, y): x = x[0].count(os.sep) y = y[0].count(os.sep) return cmp(x, y) self.toRename.sort(recursiveFolderSort) but I still need a way of generating the correct names. Solution finder will have his/her name placed on the credits page. http://file-folder-ren.sourceforge.net/index.php?page=Links Thanks in advance !! -- http://mail.python.org/mailman/listinfo/python-list