Python Glossary English

Python 3.3+osфункция

os.replace()

os — переименование/перемещение

Переименовывает файл, перезаписывая существующий одинаково на всех ОС. В пределах одной файловой системы замена атомарна.

Синтаксис

os.replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None)

Главное отличие от os.rename: если цель существует, rename на Windows падает FileExistsError, а на Linux молча её заменяет, тогда как replace перезаписывает везде. Атомарность даёт надёжную запись: пишем во временный файл рядом и делаем replace — читатель видит либо старую версию, либо новую, но не половину. «Рядом» обязательно: между разными файловыми системами (другой диск, /tmp) будет OSError с EXDEV, и нужен shutil.move. Каталог файлом не заменить — IsADirectoryError или PermissionError.

Примеры

import os
with open('config.json', 'w', encoding='utf-8') as f:
    f.write('{"v": 1}')
with open('config.json.tmp', 'w', encoding='utf-8') as f:
    f.write('{"v": 2}')
os.replace('config.json.tmp', 'config.json')
with open('config.json', encoding='utf-8') as f:
    print(f.read())  # → {"v": 2}
print(os.path.exists('config.json.tmp'))  # → False

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности