Копирование файлов в Python с shutil.copy() и shutil.copystat()
Основы копирования файлов в Python
Модуль shutil в Python предлагает простые функции для копирования файлов и сохранения метаданных. Две основные утилиты — shutil.copy() и shutil.copystat().
copy(src, dst)
Копирует файл из src в назначение dst. Содержимое файла дублируется, но права доступа и временные метки не сохраняются.
copystat(src, dst)
Копирует метаданные файла — включая права доступа, временные метки и другие OS-специфичные атрибуты — из src в dst. Должен вызываться после успешного copy() для полной репликации состояния файла.
Пошаговый пример
- Найдите исходный файл
Убедитесь, чтоguru99.txtсуществует в текущей рабочей директории и получите его абсолютный путь.

import os
from os import path
src_path = path.realpath("guru99.txt")
print("Source:", src_path)
- Создайте имя резервной копии
Добавьте.bakк исходному имени файла для формирования пути назначения.
dst_path = src_path + ".bak"
print("Destination:", dst_path)
- Скопируйте содержимое файла
Используйтеshutil.copy()для дублирования данных файла.
import shutil shutil.copy(src_path, dst_path)
- Скопируйте метаданные
После копирования содержимого реплицируйте права и временные метки оригинального файла.
shutil.copystat(src_path, dst_path)
- Проверьте копию
Используйтеos.path.getmtime()для отображения времени последней модификации резервного файла.
import datetime
mod_time = path.getmtime(dst_path)
print("Last modified:", datetime.datetime.fromtimestamp(mod_time))
Запуск скрипта создаст guru99.txt.bak в той же директории, с теми же правами и временными метками, что и оригинал.
Практические советы
- Всегда выполняйте
shutil.copy()передshutil.copystat()— последняя требует существующий файл назначения. - При работе через разные файловые системы помните, что не все атрибуты метаданных поддерживаются;
copystat()скопирует только то, что предоставляет ОС. - Для рекурсивного копирования директорий рассмотрите
shutil.copytree()илиshutil.copy2(), объединяющееcopy()иcopystat()в один шаг.
Резюме
- Используйте
shutil.copy(src, dst)для дублирования содержимого файла. - Используйте
shutil.copystat(src, dst)для дублирования прав доступа, временных меток и других метаданных.
Python
- Освоение типов данных в Python: практическое руководство
- Мастерство операторов Python: Полное руководство
- Оператор pass в Python: практическое руководство
- Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
- Словари в Python: создание, манипуляции и продвинутые техники
- Работа с файлами в Python: открытие, чтение, запись и управление
- Python len(): практическое руководство по измерению длины объектов
- Мастерство метода String.find() в Python: синтаксис, примеры и альтернативы
- Проверка существования файлов и директорий в Python — практическое руководство
- Python JSON: кодирование, декодирование и работа с файлами — практическое руководство