Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change folder names in python?

Tags:

python

rename

I have multiple folders each with the name of a person, with the first name(s) first and the surname last. I want to change the folder names so that the surname is first followed by a comma and then the first name(s) follow.

As an example, in the folder Test, i have:

C:/Test/John Smith C:/Test/Fred Jones C:/Test/Ben Jack Martin 

and i want to make this:

C:/Test/Smith, John C:/Test/Jones, Fred C:/Test/Martin, Ben Jack 

I tried some things with os.rename but i couldn't seem to make it work with the varying name length, and i wasn't sure how to insert the comma into the surname.

Also, some of the folder names are already in the correct form, so i need to skip these folders during the renaming. I think you can do this by just adding an if, so that if the folder name contains a comma it will continue.

Otherwise, the surname will always be the last word in the folder name.

Thanks for any help you can provide.

like image 893
user1130955 Avatar asked Jan 04 '12 22:01

user1130955


People also ask

How do I rename a folder in Python?

rename() method in Python is used to rename a file or directory. This method renames a source file/ directory to specified destination file/directory.

How do you change a filename in Python?

Use rename() method of an OS module Use the os. rename() method to rename a file in a folder. Pass both the old name and a new name to the os. rename(old_name, new_name) function to rename a file.

How do I rename all files in a directory in Python?

To rename files in Python, use the rename() method of the os module. The parameters of the rename() method are the source address (old name) and the destination address (new name).


1 Answers

You can write it out fairly straight-forward, using os.listdir and the os.path functions:

import os basedir = 'C:/Test' for fn in os.listdir(basedir):   if not os.path.isdir(os.path.join(basedir, fn)):     continue # Not a directory   if ',' in fn:     continue # Already in the correct form   if ' ' not in fn:     continue # Invalid format   firstname,_,surname = fn.rpartition(' ')   os.rename(os.path.join(basedir, fn),             os.path.join(basedir, surname + ', ' + firstname)) 
like image 87
phihag Avatar answered Oct 02 '22 15:10

phihag