burt46 burt46 - 3 months ago 19
Python Question

python append folder name to filenames in all sub folders

I am trying to append the name of a folder to all filenames within that folder. I have to loop through a parent folder that contain sub folders. I have to do this in Python and not a bat file.

Example is, take these folders:

Parent Folder
Sub1
example01.txt
example01.jpg
example01.tif
Sub2
example01.txt
example01.jpg
example01.tif


To this

Parent Folder
Sub1
Sub1_example01.txt
Sub1_example01.jpg
Sub1_example01.tif
Sub2
Sub2_example01.txt
Sub2_example01.jpg
Sub2_example01.tif


I believe its os.rename, but i cant work out how to call the folder name.

Thanks for the advice.

Answer

I would use os.path.basename on the root to find your prefix.

import os

for root, dirs, files in os.walk("Parent"):
    if not files:
        continue
    prefix = os.path.basename(root)
    for f in files:
        os.rename(os.path.join(root, f), os.path.join(root, "{}_{}".format(prefix, f)))

Before

> tree Parent
Parent
├── Sub1
│   ├── example01.jpg
│   ├── example02.jpg
│   └── example03.jpg
└── Sub2
    ├── example01.jpg
    ├── example02.jpg
    └── example03.jpg

2 directories, 6 files

After

> tree Parent
Parent
├── Sub1
│   ├── Sub1_example01.jpg
│   ├── Sub1_example02.jpg
│   └── Sub1_example03.jpg
└── Sub2
    ├── Sub2_example01.jpg
    ├── Sub2_example02.jpg
    └── Sub2_example03.jpg

2 directories, 6 files