Переименования файлов на основе родительской папки

Помогите пожалуйста со скриптом: нужно переименовать файлы в папках и добавлять к ним имя папки (это надо чтоб названия файлов было уникальны) Не со всем понимаю, как это реализовать, так как в папке Data сотни папок (Football, Food и т. д. )

Вложенность такая - Data/Football/JPG/0.1.jpg - мне нужно брать название папки и добавлять его к файлу, то есть должно получится Football_01.jpg

Буду признателен за помощь

import os

path = 'data/Football/JPG'
i = 0
for filename in os.listdir(path):
    os.rename(os.path.join(path, filename), os.path.join(path, 'Football_' + str(i) + '.jpg'))
    i = i + 1

UPDATE:

Что делает код ниже:

data\Football\JPG\JPG01.JPG

Что мне нужно:

data\Football\JPG\Football_01.jpg

import os
import ntpath

path = "data"

for root, dir, files in os.walk(path):
    for file in files:
        dirname = ntpath.basename(root)
        ori = root + '/' + file
        dest = root + '/' + dirname + file
        os.rename(ori, dest)

Решение:

import os

path = "data"

sub_directories = os.listdir(path)
for subdir in sub_directories:
    files = [(x[0], x[2]) for x in os.walk(os.path.join(path, subdir))]
    for filepath, filenames in files:
        for file in filenames:
            if subdir in file:
                pass
            else:
                os.rename(os.path.join(filepath, file), os.path.join(filepath, f"{subdir}_{file}"))

Ответы (1 шт):

Автор решения: n1tr0xs

Имя dir для переменной - очень плохо, поскольку:

  1. Это встроенная функция в Python
  2. os.walk() возвращает (string, list, list). А значит имя должно быть во множественном числе.

Код

import os

path = 'data'

for dirpath, dirs, files in os.walk(path):
    dirname = dirpath.split('\\')[-1]
    for file in files:
        src = dirpath + '\\' + file
        dest = dirpath + '\\' + dirname + '_' + file
        os.rename(src, dest)
→ Ссылка