Python: копирование файла
Чтобы скопировать содержимое одного файла в другой, в Python используют стандартный модуль shutil. В нём есть несколько похожих функций — разница между ними в том, какие именно метаданные переносятся.
Что нужно знать
Пример: модуль shutil
from shutil import copyfile
copyfile("/root/a.txt", "/root/b.txt")
Первый аргумент copyfile() — путь к исходному файлу, второй — путь к файлу-назначению. Содержимое целевого файла полностью заменяется содержимым исходного.
Сравнение методов
В модуле shutil есть несколько схожих функций. Разница — в том, какие свойства файла копируются:
Метод |
Сохраняет права |
Принимает каталог как назначение |
Копирует метаданные |
Принимает file object |
|---|---|---|---|---|
|
Да |
Да |
Нет |
Нет |
|
Нет |
Нет |
Нет |
Нет |
|
Да |
Да |
Да |
Нет |
|
Нет |
Нет |
Нет |
Да |
Как это работает
copyfile()— самый простой вариант: открывает источник и назначение в бинарном режиме и переносит содержимое.copy()дополнительно копирует права доступа.copy2()старается перенести максимум: содержимое, права и метаданные (время изменения и т. д.).copyfileobj()работает не с путями, а с уже открытыми файловыми объектами — удобно, когда исходный файл, например, получен из сети.
Совет
Если назначение должно быть каталогом, а не конкретным файлом, выбирайте copy() или copy2().