Python 3.8+Linuxosфункция
os.copy_file_range
os — эффективное копирование
Копирует диапазон байтов между файлами в ядре (без прохода через пользовательский буфер; Python 3.8+). Доступно на Linux.
Синтаксис
os.copy_file_range(...)
Копирует данные внутри ядра, а на файловых системах с поддержкой reflink, например Btrfs и XFS, может вовсе не копировать блоки, а сослаться на них. С Python 3.14 shutil.copyfile на Linux использует её сам, когда это возможно. Может скопировать меньше запрошенного — вызывайте в цикле до нулевого результата.
Примеры
import os
src = os.open('copy_src.txt', os.O_RDWR | os.O_CREAT | os.O_TRUNC) # файл-источник в текущем каталоге
print(os.write(src, b'hello world!')) # → 12 — записали 12 байт без буферизации Python
dst = os.open('copy_dst.txt', os.O_WRONLY | os.O_CREAT | os.O_TRUNC) # файл-приёмник в текущем каталоге
print(os.copy_file_range(src, dst, 12, offset_src=0)) # → 12 — ядро скопировало байты, минуя буфер Python
print(os.copy_file_range(src, dst, 12, offset_src=12)) # → 0 — за концом файла копировать нечего
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности