Переименование нескольких файлов в каталоге с помощью Python
Я пытаюсь переименовать несколько файлов в каталог, используя этот Python script:
import os
path = '/Users/myName/Desktop/directory'
files = os.listdir(path)
i = 1
for file in files:
os.rename(file, str(i)+'.jpg')
i = i+1
Когда я запускаю этот script, я получаю следующую ошибку:
Traceback (most recent call last):
File "rename.py", line 7, in <module>
os.rename(file, str(i)+'.jpg')
OSError: [Errno 2] No such file or directory
Почему? Как я могу решить эту проблему?
Спасибо.
Ответы
Ответ 1
Вы не даете весь путь при переименовании, сделайте это так:
import os
path = '/Users/myName/Desktop/directory'
files = os.listdir(path)
for index, file in enumerate(files):
os.rename(os.path.join(path, file), os.path.join(path, ''.join([str(index), '.jpg'])))
Изменить: благодаря tavo, первое решение переместит файл в текущий каталог, исправит это.
Ответ 2
Сначала вы должны сделать этот путь как текущий рабочий каталог.
достаточно просто.
остальная часть кода не имеет ошибок.
чтобы сделать его текущим рабочим каталогом:
os.chdir(path)
Ответ 3
Согласно комментарию @daniel, os.listdir() возвращает только имена файлов, а не полный путь к файлу. Используйте os.path.join (путь, файл), чтобы получить полный путь и переименовать его.
import os
path = 'C:\\Users\\Admin\\Desktop\\Jayesh'
files = os.listdir(path)
for file in files:
os.rename(os.path.join(path, file), os.path.join(path, 'xyz_' + file + '.csv'))
Ответ 4
Если ваши файлы переименовываются случайным образом, то сначала вам нужно отсортировать файлы в каталоге. Данный код сначала сортирует, а затем переименовывает файлы.
import os
import re
path = 'target_folder_directory'
files = os.listdir(path)
files.sort(key=lambda var:[int(x) if x.isdigit() else x for x in re.findall(r'[^0-9]|[0-9]+', var)])
for i, file in enumerate(files):
os.rename(path + file, path + "{}".format(i)+".jpg")
Ответ 5
Просто поиграв с принятым ответом, определите переменную пути и список:
path = "/Your/path/to/folder/"
files = os.listdir(path)
а затем переберите этот список:
for index, file in enumerate(files):
#print (file)
os.rename(path+file, path +'file_' + str(index)+ '.jpg')
или зациклите то же самое с одной строкой для понимания списка Python:
[os.rename(path+file, path +'jog_' + str(index)+ '.jpg') for index, file in enumerate(files)]
Я думаю, что первая более читаема, во второй первая часть цикла - это только вторая часть понимания списка.
Ответ 6
Я работал над быстрым и гибким сценарием, чтобы позаботиться об отображении различий, запросе подтверждений и переименовании. Если вам нужно рабочее решение, вы можете скопировать этот скрипт и поместить его в папку, в которую вы хотите переименовать файлы. https://gist.github.com/aljgom/81e8e4ca9584b481523271b8725448b8
Он переименовывает файлы в текущем каталоге, передавая "функции переименования", каждая функция может позаботиться об изменении. Затем определяет изменения, которые внесет каждая функция, и отображает различия, используя цвета, и запрашивает подтверждение для внесения изменений. Работает на pycharm, не тестировал его на разных консолях