smw
smw

Reputation: 55

Renaming multiple sub folders to match the parent folder's name

I'm a python beginner but have some basic experience, and I need someone to please help me use the os module to rename sub folders based on their parent folder. I've been searching for answers for the past week and have not had any success. I'm assuming I need to use the os.walk method to do this.

Here is my folder structure:

I need the results to look like this.

Can someone please help?

Upvotes: 0

Views: 111

Answers (2)

user5725006
user5725006

Reputation:

python 2.7:

import os

os.chdir("C:\data\test\") # go to dir
sub_dirs = os.walk('.').next()[1] # get list of subdirs
for sub_dir in sub_dirs:
    sub_sub_dir = os.walk('.').next[1] # get sub-subdir
    os.rmdir(sub_sub_dir) # remove sub-subdir
    os.makedirs(sub_dir + '\bla') # make new sub-subdir named subdir\bla

python 3+:

import os

os.chdir("C:\data\test\")
sub_dirs=next(os.walk('.'))[1] 
for sub_dir in sub_dirs:
    sub_sub_dir = next(os.walk('.'))[1]
    os.rmdir(sub_sub_dir)
    os.makedirs(sub_dir + '\bla')

Untested, but should do it.

Upvotes: 1

squgeim
squgeim

Reputation: 2351

You can get a list of all the files and it's respective folder location using this one liner:

here = '.' # Current location
files = [(root, files) for root, dirs, files in os.walk(here) if (not dirs and files)]

For the given folder structure it will return:

[
  ('C:\data\test\map1', ['1617151']),
  ...
]

You can now loop over this list and rename the files (https://docs.python.org/3/library/os.html#os.rename). You can get the parent folder's name by splitting the root string (root.split('\')[-1]).

Upvotes: 0

Related Questions