Для копирования файла с помощью модуля shutil
можно использовать функции:
shutil.copy(src, dst)
- копирует содержимое файла src
в файл или директорию dst
. Копирует также биты прав доступа.shutil.copy2(src, dst)
- аналогична shutil.copy()
, но также пытается сохранить метаданные файла (время последнего доступа и модификации).shutil.copyfile(src, dst)
- копирует только содержимое файла src
в файл dst
. Поднимает исключение, если dst
уже существует.Например:
import shutil
# Копирование файла с сохранением метаданных
shutil.copy2('source.txt', 'destination.txt')
# Копирование файла с новым именем
shutil.copy('source.txt', 'new_directory/new_file.txt')
Модуль shutil
в Python предоставляет несколько функций для копирования файлов. Вот наиболее распространенные способы:
1. shutil.copy(src, dst)
:
Копирует файл src
в местоположение dst
. Если dst
- файл, он будет перезаписан. Если dst
- директория, файл src
будет скопирован в эту директорию с тем же именем. Эта функция копирует только содержимое файла и права доступа. Метаданные, такие как время создания/изменения, не копируются.
import shutil
src = 'source_file.txt'
dst = 'destination_file.txt'
shutil.copy(src, dst) # Копирует source_file.txt в destination_file.txt
dst_dir = 'destination_directory' # Должна существовать
shutil.copy(src, dst_dir) # Копирует source_file.txt в destination_directory/source_file.txt
2. shutil.copy2(src, dst)
:
Работает аналогично shutil.copy()
, но также пытается сохранить все метаданные, включая время доступа и изменения файла. Если это невозможно (например, из-за ограничений прав доступа), копирование метаданных будет проигнорировано.
import shutil
src = 'source_file.txt'
dst = 'destination_file.txt'
shutil.copy2(src, dst) # Копирует source_file.txt в destination_file.txt и сохраняет метаданные
3. shutil.copyfile(src, dst)
:
Копирует только содержимое файла src
в файл dst
. dst
должен быть файлом, а не директорией. Права доступа не копируются.
import shutil
src = 'source_file.txt'
dst = 'destination_file.txt'
shutil.copyfile(src, dst) # Копирует содержимое source_file.txt в destination_file.txt
Важно:
shutil.copy()
и shutil.copy2()
могут выдать ошибку. Для создания директорий используйте os.makedirs()
.IOError
и OSError
, которые могут возникнуть при копировании файлов (например, из-за недостаточных прав доступа или отсутствия файла).shutil.copytree()
.pathlib.Path
.Пример обработки исключений:
import shutil
import os
src = 'source_file.txt'
dst = 'destination_directory/destination_file.txt'
try:
os.makedirs(os.path.dirname(dst), exist_ok=True) # Создаем директорию, если она не существует
shutil.copy2(src, dst)
print(f"Файл {src} успешно скопирован в {dst}")
except FileNotFoundError:
print(f"Файл {src} не найден.")
except PermissionError:
print(f"Нет прав для копирования файла {src} в {dst}.")
except OSError as e:
print(f"Ошибка при копировании файла: {e}")
except Exception as e:
print(f"Неизвестная ошибка: {e}")