path.rename сохраняет файлы в корневую папку

Рейтинг: 0Ответов: 1Опубликовано: 15.04.2023

Есть скрипт для переименования файлов по порядку, которые находятся по пути "D:/files". По окончанию работы скрипта файлы сохраняются в корневую папку, в которой находится main.py

Как сохранить переименованные файлы в папку в которой они лежат изначально, тобишь в "D:/files" ?

import pathlib

folder = "D:/files"
filename = input('Введите имя файлов:')

path = pathlib.Path(folder)
for i, path in enumerate(path.glob('*.jpg')):
    new_name = str(filename) + ' ' + '[' + str(i) + ']' + path.suffix
    path.rename(new_name) 

Ответы

▲ 0Принят

rename на самом деле не переименование (не только переименование), а перемещение.

Чтобы при перемещении файл остался в той же папке, в которой был, нужно к имени слева добавить путь к папке. Например, взять path, который у вас снаружи цикла:

base_path = pathlib.Path(folder)
for i, path in enumerate(base_path.glob('*.jpg')):
    new_name = str(filename) + ' ' + '[' + str(i) + ']' + path.suffix
    path.rename(base_path / new_name)

Либо брать исходный путь к файлу из path внутри цикла:

path.rename(path.parent / new_name)

По поводу формирования имени файла:

  1. filename не нужно оборачивать в str, т.к. input и так вернул строку
  2. В целом, удобнее использовать форматирование строк (например, f-строки), а не склеивать из кусков

Можно переписать формирование нового имени файла так:

new_name = f"{filename} [{i}]{path.suffix}"