Python: копирование файла

Чтобы скопировать содержимое одного файла в другой, в Python используют стандартный модуль shutil. В нём есть несколько похожих функций — разница между ними в том, какие именно метаданные переносятся.


Что нужно знать


Пример: модуль shutil

from shutil import copyfile
copyfile("/root/a.txt", "/root/b.txt")

Первый аргумент copyfile() — путь к исходному файлу, второй — путь к файлу-назначению. Содержимое целевого файла полностью заменяется содержимым исходного.


Сравнение методов

В модуле shutil есть несколько схожих функций. Разница — в том, какие свойства файла копируются:

Метод

Сохраняет права

Принимает каталог как назначение

Копирует метаданные

Принимает file object

copy()

Да

Да

Нет

Нет

copyfile()

Нет

Нет

Нет

Нет

copy2()

Да

Да

Да

Нет

copyfileobj()

Нет

Нет

Нет

Да


Как это работает

  • copyfile() — самый простой вариант: открывает источник и назначение в бинарном режиме и переносит содержимое.

  • copy() дополнительно копирует права доступа.

  • copy2() старается перенести максимум: содержимое, права и метаданные (время изменения и т. д.).

  • copyfileobj() работает не с путями, а с уже открытыми файловыми объектами — удобно, когда исходный файл, например, получен из сети.

Совет

Если назначение должно быть каталогом, а не конкретным файлом, выбирайте copy() или copy2().