Переименовывать файлы в подпапках по определенному формату в Python - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть папка с множеством подпапок.Каждая из подпапок имеет разные типы файлов изображений.Я пытаюсь переименовать эти файлы в определенном формате.Данные выглядят так:

folder
        \ sub1\file0.jpg
        \ sub1\file1.jpg
        \ sub1\file2.png
        .
        .
        .
        \ sub2\xxx.png
        \ sub2\yyy.jpg
        \ sub2\zzz.png
        .
        .
        .

Требуемый вывод:

folder
        \ sub1\file-01.jpg
        \ sub1\file-02.jpg
        \ sub1\file-03.png
        .
        .
        .
        \ sub2\file-01.png
        \ sub2\file-02.jpg
        \ sub2\file-03.png
        .
        .
        .

До сих пор я пробовал следующий код, но он не работает.

import os

dir_name = "D:/folder"     
for root, dirs, files in os.walk(dir_name, topdown=False):
    for file in files:
        file_name = os.path.splitext(file)[0]#file name no ext
        extension = os.path.splitext(file)[1]
        dir_name = os.path.basename(root)
        os.rename(root+"/"+file, root+"/"+"file"+"s%"+extension)

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

os.rename(root+"/"+file, root+"/"+"file"+"s%"+extension)

Вы неправильно используете синтаксис форматирования строки %s (я предполагаю, что именно это вы и собираетесь делать).Подробнее об этом здесь .В качестве напоминания вам нужно вставить фактическую переменную вместо %s.Я уверен, что вы можете понять, как это реализовать.(другой ответ также дает возможное решение)

На самом деле, я бы предложил использовать форматирование строк для root, file и extension - и пока вы в этомрассмотрите возможность использования f-строк вместо синтаксиса %s.

0 голосов
/ 30 ноября 2018

Это один подход с использованием enumerate.

Демонстрация:

import os

dir_name = "D:/folder"      
for root, dirs, files in os.walk(dir_name, topdown=False):
    for num, file in enumerate(files, 1):   #enumerate to get number
        src =  os.path.join(root, file)
        file_s = os.path.splitext(file)
        dest = os.path.join(root, "{0}-{1}.{2}".format(file_s[0], str(num).rjust(2, "0"), file_s[1]))   #Form destination file name
        os.rename(src, dest)   #Rename. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...