Переименования файлов на основе родительской папки
Помогите пожалуйста со скриптом: нужно переименовать файлы в папках и добавлять к ним имя папки (это надо чтоб названия файлов было уникальны) Не со всем понимаю, как это реализовать, так как в папке 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 для переменной - очень плохо, поскольку:
- Это встроенная функция в
Python 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)