pythonrename

How to change folder names in python?


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.


Solution

  • 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))