Чем отличаются методы в pathlib: Path.rename от Path.replace

Оба метода одинаково переименовывают файл. По документации разница не ясна. Методом тыка разница тоже не обнаружена.


Ответы (2 шт):

Автор решения: Voko

Помогла ссылка из первого комментария.

Path.rename() гарантированно переименовывает существующий файл только в Unix.

Path.replace является кросплатформенным и переименовывает независимо от платформы.

→ Ссылка
Автор решения: MarianD

Две версии практически одинаковых функций существуют по исторической причине, причем
Path.rename() и Path.replace() повторяют функции os.rename() и os.replace().


  • .rename(): в случае существования такой папки или файла зависит от операционной системы:

    • Windows: ошибка OSError
    • POSIX системы: переименование, и за счет потери (замены в случае существования).

    Возвращает

    • None для версий Питона перед 3.8
    • новый объект Path для версий 3.8+.

  • .replace(): всегда переименование, и за счет потери (замены в случае существования).

    Возвращает

    • None для версий Питона перед 3.8
    • новый объект Path для версий 3.8+.

Значит, лучше использовать .replace(), потому что она не зависит от операционной системы (и перед применением проверить, если папка или файл с таким именем уже не существует).

→ Ссылка