переименование всех изображений в папках с использованием имени папки

1

У меня много папок. в каждой папке есть изображение. Я хочу переименовать все изображения с именем своей папки.

Например: Папка "1" имеет изображение "273.jpg" Я хочу изменить его на "1.jpg" и сохранить его в другом каталоге.

Это то, что я сделал до сих пор:

import os
import pathlib

root = "Q:/1_Projekte/2980/"

for path, subdirs, files in os.walk(root):
    for name in files:
        print (pathlib.PurePath(path, name))
        os.rename(os.path.join(path, name), os.path.join(path, os.path.basename(path)))
        print(os.path.basename(path))

Проблема в том, что он работает только для первой папки, а затем выпрыгивает с ошибкой:

this file is already available...

дерево папок и изображений выглядит так:

Q: /1_Projekte/2980/1/43425.jpg

Q: /1_Projekte/2980/2/43465.jpg

Q: /1_Projekte/2980/3/43483.jpg

Q: /1_Projekte/2980/4/43499.jpg

Таким образом, в каждом каталоге есть только один файл!

Теги:
python-3.x
folder
file-rename

2 ответа

2
Лучший ответ

Возможно, у вас есть скрытые файлы в этих каталогах. Проверьте это. Если эти файлы не являются jpg, вы можете использовать следующий код:

for path, subdirs, files in os.walk(root):
    for name in files:
        extension = name.split(".")[-1].lower()
        if extension != "jpg":
            continue
        os.rename(os.path.join(path, name), os.path.join(path, os.path.basename(path) + "." + extension))
        print(os.path.basename(path))

Этот код извлекает расширение файла и проверяет, равен ли он jpg. Если расширение файла не является jpg, то оператор continue будет запущен, и следующий файл будет проверяться. Если тип файла jpg, сценарий переименовывает его. Также этот код добавляет исходное расширение файла к новому имени. Предыдущий код не справился с этим. Надеюсь, это тебе поможет.

1

Может быть, это может помочь...

import os

root = "Q:/1_Projekte/2980/"
subdirs = [x for x in os.listdir(root) if os.path.isdir(x)]

for dir_name in subdirs:
    dir_path = root + dir_name + '/'
    files = os.listdir(dir_path)

    print(dir_name)
    print(files)

    for i in files:
        counter = 1
        extension = i.split('.')[-1]
        new_name = dir_name + '.' + extension

        while True:
            try:
                os.rename(dir_path + i, dir_path + new_name)
                break

            except:
                # If the file exists...
                new_name = dir_name + '({})'.format(counter) + '.' + extension
                counter += 1

Этот код гарантирует, что даже если файл с существующим именем существует, он будет суффикс с числом в скобках.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню