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Сообщить о неточности