Если вам нужно скопировать файл с помощью Python, но вы не знаете, как это сделать, вы попали по адресу.
Когда вы хотите скопировать файл, у вас может быть несколько сценариев: копирование только содержимого, использование конечного каталога в качестве параметра, копирование метаданных и так далее. Именно поэтому Python предлагает различные альтернативы при копировании файла. Здесь мы рассмотрим наиболее распространенные из них, использующие модуль shutil.
Содержание
Копирование файла в Python с помощью функции copy
copy – это основная функция, которую следует использовать, если вы хотите скопировать файл в Python.
Я уже говорил, он определяется внутри модуля shutil.
Главная особенность этой функции заключается в том, что она копирует содержимое файла и его разрешения, но не копирует другие метаданные, такие как оригинальные даты создания и модификации.
Как именно это работает?
Данная функция позволяет задать следующие параметры:
- src: Полный путь или имя исходного файла. Это может быть строка или объект PathLike.
- dst: Путь к файлу назначения. Если путь является каталогом, исходный файл будет скопирован в каталог, принимая в качестве имени имя исходного файла.
- follow_symlinks (по умолчанию, True): Если follow_symlinks равно false и src является символической ссылкой, dst будет создан как символическая ссылка. Если параметр follow_symlinks равен true и src является символической ссылкой, dst будет копией файла, на который ссылается src.
Давайте рассмотрим некоторые примеры использования:
import shutil
shutil.copy('original_file.txt', 'copy_file.txt')
shutil.copy('/dir/original_file.txt', '/dir/copy/copy_file.txt')
shutil.copy('/dir/original_file.txt', '/dir/copy')
Code language: JavaScript (javascript)
Копирование метаданных с помощью copy2
Если вам дополнительно нужно скопировать метаданные файла, вы можете использовать функцию copy2. Эта функция ведет себя точно так же, как функция копирования в предыдущем разделе, за исключением того, что она также сохраняет метаданные из исходного файла в целевом файле.
import shutil
shutil.copy2('original_file.txt', 'copy_file.txt')
shutil.copy2('/dir/original_file.txt', '/dir/copy/copy_file.txt')
shutil.copy2('/dir/original_file.txt', '/dir/copy')
Code language: JavaScript (javascript)
Копировать только содержимое файла
Если вам нужно скопировать только содержимое файла, вы можете использовать функцию copyfile(src, dst, follow_symlinks=True). Эта функция создает копию исходного файла src в целевой файл dst.
src и dst – это строки с полными путями к исходному и целевому файлам, соответственно. Кроме того, если целевой файл уже существует, он будет заменен.
Еще одна вещь, которую следует помнить об этой функции, заключается в том, что у вас должна быть возможность записи в место назначения, иначе будет выброшено исключение OSError.
import shutil
shutil.copyfile('original_file', 'copy_file.txt')
shutil.copyfile('/dir/original_file.txt', '/dir/copy/copy_file.txt')
Code language: JavaScript (javascript)
Копирование содержимого файла с помощью объектов файла
Последняя функция, которую мы рассмотрим – copyfileobj. Эта функция похожа на предыдущую, только src и dst должны быть объектами файлов (а не строками с путями источника/назначения).
import shutil
file_src = 'source.txt'
f_src = open(file_src, 'rb')
file_dest = 'destination.txt'
f_dest = open(file_dest, 'wb')
shutil.copyfileobj(f_src, f_dest)
Code language: JavaScript (javascript)