Как переименовать файлы в Python

Если имеется только имя файла, воспользуемся os.path.splitext() , который возвращает кортеж из имени файла и расширения:
import os for file in os.listdir(): name, ext = os.path.splitext(file) # return ('путь до файла без расщирения', '.txt') new_name = f"name>_newext>" os.rename(file, new_name)
pathlib
С помощью встроенного модуля pathlib
Path.rename(new_name)
from pathlib import Path for file in os.listdir(): f = Path(file) new_name = f"f.stem>_newf.suffix>" f.rename(new_name)
shutil.move
Модуль Shutil предлагает ряд высокоуровневых операций с файлами и коллекциями файлов. В частности, предусмотрены функции, поддерживающие копирование и удаление файлов.
import shutil old_source = '/Users/r/Desktop/old_source.txt' new_source = '/Users/r/Desktop/new_source.txt' newFileName = shutil.move(old_source, new_source) print("Новый файл:", newFileName) # Новый файл: /Users/r/Desktop/new_source.txt
Переименовать все файлы в папке — Python
Мне нужно, что бы я мог выбрать папку(использую интерфейс на tkinter) и программа сколько бы там не было файлов переименовывала все файлы. Это можно и реализовать и проще, что бы человек вписывал расширение и программа добавляла допустим как каждому файлу
while есть еще файлы n +=1 . ('n' + '.' + 'касширение') перейти к следующему файлу
просмотрел достаточно много документации, но так и не нашел, как это можно сделать. Мне нужен именно этот кусочек кода, отвечающий за пока есть файл: переименовывать его, перейти к следующему, переименовать его. Допустим в папке 200 фото формата png(который задал пользователь) с названием из каши символов и в конце работы программы они превратятся в 200 файлов с названием от 1.png до 200.png, или наоборот пользователю нужна каша(с этим я разберусь, если пойму хотя бы, как сделать то, что я спрашивал)
Отслеживать
задан 3 фев 2020 в 15:40
59 2 2 серебряных знака 11 11 бронзовых знаков
4 ответа 4
Сортировка: Сброс на вариант по умолчанию
Полностью рабочий код.
import os from tkinter import * from tkinter import filedialog as fd def selectDir(): return fd.askdirectory()+'/' def startRename(directory): directory1=directory.replace('/', '\\') ext = ent1.get() files=sorted([path for path in os.listdir(directory) if os.path.isfile(directory+path) and path.endswith(ext)]) i=0 while files: file=files[0] if not os.path.isfile(f'.'): name = f'.' os.rename(directory1+file, directory1+name) del files[0] i+=1 root = Tk() root.geometry('350x75') l1=Label(text='Расширение файла (без точки)') l1.grid(row=0, column=0) ent1 = Entry() ent1.grid(row=1, column=0) b1 = Button(text='Выбрать папку', command=lambda: startRename(selectDir())) b1.grid(row=0,column=1) root.mainloop()
Вариант №2 (без выбора расширения):
import os from tkinter import * from tkinter import filedialog as fd def selectDir(): return fd.askdirectory()+'/' def startRename(directory): directory1=directory.replace('/', '\\') files=sorted([path for path in os.listdir(directory) if os.path.isfile(directory+path)]) i=0 while files: file=files[0] ext=file.split('.')[-1] if not os.path.isfile(f'.'): name = f'.' os.rename(directory1+file, directory1+name) del files[0] i+=1 root = Tk() root.geometry('350x75') b1 = Button(text='Выбрать папку', command=lambda: startRename(selectDir())) b1.grid(row=0,column=1) root.mainloop()
Переименовать или заменить файл (каталог) средствами pathlib
Описанные ниже методы позволяют переименовать/заменить файл или каталог средствами модуля pathlib . Данные методы принадлежат экземпляру, созданному из класса Path() .
Так как класс pathlib.Path() наследуется от класса pathlib.PurePath() , следовательно он поддерживает все операции по манипуляции с путями файловой системы.
Смотрите другие методы и свойства, доступные экземпляру класса Path() модуля pathlib .
Содержание:
- Переименовать файл (каталог)
- Заменить файл (каталог)
Path.rename(target) :
Метод Path.rename() переименует файл или каталог пути path в указанную цель target . Значение target может быть либо строкой, либо другим объектом пути.
- С версии Python-3.8 метод Path.rename() вернет новый экземпляр pathlib.Path() , содержащий новый путь.
- Если target является объектом пути, то его можно использовать для дальнейших манипуляций файлом с новым именем.
- В Unix, если target существует и является файлом, то он будет автоматически заменен, если у пользователя есть разрешение.
>>> from pathlib import Path >>> p = Path('foo') >>> p.open('w').write('some text') # 9 >>> target = Path('bar') >>> p.rename(target) >>> target.open().read() # 'some text' >>> target.unlink()
Path.replace(target) :
Метод Path.replace() переименует файл или каталог пути path в указанную цель target . Значение target может быть либо строкой, либо другим объектом пути.
- С версии Python-3.8 метод Path.rename() вернет новый экземпляр pathlib.Path() , содержащий новый путь.
- Если target является объектом пути, то его можно использовать для дальнейших манипуляций файлом с новым именем.
- Если target указывает на существующий файл или каталог, то он будет безоговорочно заменен.
>>> p = Path('myfile.txt') >>> p.write_text('This is short text') 18 >>> p.replace('other-file.ext') # Поведение метода до версии Python-3.8 >>> p.is_file() # False >>> p # PosixPath('myfile.txt') >>> p = Path('other-file.ext') >>> p.read_text() # 'This is short text' >>> p.unlink()
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Класс pathlib.PurePath() и его подклассы
- Класс pathlib.Path() и его подклассы
- Манипуляции с путями файловой системы средствами pathlib
- Проверить наличие файла/каталога/ссылки и т.д. средствами pathlib
- Открытие файла, чтение и запись информации средствами pathlib
- Определение положения в файловой системе средствами pathlib
- Список файлов в папке/каталоге по шаблону средствами pathlib
- Создание/удаление файла/каталога или ссылки средствами pathlib
- Получение информации о файле/каталоге средствами pathlib
- Изменение режима доступа к файлу или каталогу средствами pathlib
- Переименование/замена файла или каталога средствами pathlib
- Преобразование объекта пути pathlib в строку
- Метод walk() модуля pathlib, рекурсивный обход каталога
- Сравнение pathlib с модулями os и os.path
Функция rename() модуля os в Python
Функция rename() модуля os переименовывает файл или каталог с именем src в dst . Если имя dst уже существует, то операция os.rename() , в ряде случаев, может завершится с подклассом исключения OSError .
В Windows, если dst уже существует, всегда возникает ошибка FileExistsError .
В Unix, если src — это файл, а dst — это каталог или наоборот, то поднимаются исключения IsADirectoryError или NotADirectoryError соответственно.
Если оба являются каталогами и dst пуст, то dst будет заменен без уведомления.Если dst является непустым каталогом, возникает OSError .Если оба являются файлами, то dst будет заменен без уведомления, если у пользователя есть разрешение.
Операция может завершиться с ошибкой на некоторых разновидностях Unix, если src и dst находятся на разных файловых системах. В случае успеха, переименование будет атомарной операцией, это требование POSIX.
Аргументы src и dst могут принимать объекты, представляющие путь файловой системы, такие как pathlib.PurePath .
Функция os.rename() может поддерживать указание src_dir_fd и/или dst_dir_fd для предоставления путей относительно дескриптора каталога.
Если необходимо кросс-платформенное переименование, то используйте функцию os.replace() .
Примеры использования:
>>> import os >>> scr_dir, dst_dir = 'test_dir', 'rename_dir' >>> os.mkdir(scr_dir, 0o774) # переименовывание >>> os.rename(scr_dir, dst_dir) >>> os.path.isdir(dst_dir) # True >>> os.rmdir(dst_dir) >>> scr_f, dst_f = 'test_file.txt', 'rename_file.txt' # создадим файл >>> fp = open(scr_f, 'w') >>> fp.write('data string') >>> fp.close() # переименовывание >>> os.rename(scr_f, dst_f) >>> os.path.isfile(dst_f) # True >>> os.unlink(dst_f)
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Управление переменной средой окружения системы
- Представление пути в файловой системе
- Извлечение/установка uid, gid и pid процесса
- Наследование файловых дескрипторов
- Создание дескриптора файла, чтение, запись и его закрытие
- Функция listdir() модуля os
- Функция walk() модуля os
- Функция scandir() модуля os
- Объект DirEntry() модуля os
- Функция stat() модуля os
- Объект stat_result, результаты выполнения os.stat()
- Функция lstat() модуля os
- Функция access() модуля os
- Функция chdir() модуля os
- Функция chmod() модуля os
- Функция chown() модуля os
- Функция chroot() модуля os
- Функция getcwd() модуля os
- Функция link() модуля os
- Функция mkdir() модуля os
- Функция makedirs() модуля os
- Функция symlink() модуля os
- Функция readlink() модуля os
- Функция remove() модуля os, удалить файл
- Функция removedirs() модуля os
- Функция rename() модуля os
- Функция renames() модуля os
- Функция replace() модуля os
- Функция rmdir() модуля os
- Функция strerror() модуля os
- Функция supports_dir_fd модуля os
- Функция supports_effective_ids модуля os
- Функция supports_fd модуля os
- Функция supports_follow_symlinks модуля os
- Функция truncate() модуля os
- Функция utime() модуля os
- Манипулирование списком контроля доступа ACL в Linux
- Функция abort() модуля os
- Функция exec*() модуля os
- Функция popen() модуля os
- Функция system() модуля os
- Функция _exit() модуля os
- Функция fork() модуля os
- Функция kill() модуля os
- Функция spawn() модуля os
- Функция umask() модуля os
- Функция uname() модуля os
- Функция wait() модуля os
- Функция waitpid() модуля os
- Определение состояния процесса
- Константы для поддержки операций с путями
- Генератор случайных байтов на основе модуля os
- Функция startfile() модуля os
- Функция times() модуля os
- Функции getloadavg() и cpu_count() модуля os
- Функция waitstatus_to_exitcode() модуля os
- Функция listdrives() модуля os, имена дисков Windows
- Функция listmounts() модуля os, точки монтирования Windows
- Функция listvolumes() модуля os, список томов Windows