Задать вопрос
@DannYLook
Программист

Есть код, которой должен менять название фото, он меняет название одного фото, как сделать что бы название изменялась у всех фото из папки?

Добрый день! Есть код
import os

path = r"C:\test\Изменение название фотографии\Фото"

i = 'IMG_20220623_205705'
j = i.split('_')
k = f'{j[0]}_{j[1]}_{int(j[2])+2}'


for file_name in os.listdir(path):
    # Имя файла и его формат
    base_name, ext = os.path.splitext(file_name)

    # Нужны файлы определенного формата
    if ext.lower() not in ['.jpg', '.png']:
        continue

    # Полный путь к текущему файлу
    abs_file_name = os.path.join(path, file_name)

    # Полный путь к текущему файлу с новым названием
    new_abs_file_name = os.path.join(path, str(k) + ext)

    os.rename(abs_file_name, new_abs_file_name)

Он работает так i = 'IMG_20220623_205705' к последнему числу добавляется 2, и получается i = 'IMG_20220623_205707' как сделать что бы ко фсем фото в папке добавлялось 2(как в примере).
Заранее спасибо за потраченное ваше время!
  • Вопрос задан
  • 97 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
sswwssww
@sswwssww
У тебя проблема с непониманием того как работают f строки. Во-первых в str(k) нет смысла, k итак уже строка. Во-вторых, k = f'{j[0]}_{j[1]}_{int(j[2])+2}' в этом моменте k уже вычислен и ему присвоен результат выражения справа.
И получается что в цикле for, в new_abs_file_name = os.path.join(path, str(k) + ext) у тебя меняется только ext, а k будет всегда одинаковым, если будет одинаковое ext у двух разных файлов то ты просто перетрёшь один файл другим.
В третьих, i у тебя жёстко задано один раз, а тебе нужно динамически в цикле брать имя файла, которое у тебя называется base_name и проделывать с ним то что ты делаешь с i.

import os

path = r"C:\test\Изменение название фотографии\Фото"

for file_name in os.listdir(path):
    # Имя файла и его формат
    base_name, ext = os.path.splitext(file_name)

    # Нужны файлы определенного формата
    if ext.lower() not in ['.jpg', '.png']:
        continue

    # Полный путь к текущему файлу
    abs_file_name = os.path.join(path, file_name)

    # Полный путь к текущему файлу с новым названием
    j = base_name.split('_')
    k = f'{j[0]}_{j[1]}_{int(j[2])+2}'
    new_abs_file_name = os.path.join(path, str(k) + ext)

    os.rename(abs_file_name, new_abs_file_name)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы