import os os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
src
- str
, исходное имя файла или каталога,dst
- str
, новое имя файла или каталога,src_dir_fd=None
- int
, исходный дескриптор каталога,dst_dir_fd=None
- int
, новый дескриптор каталога,Функция 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)