Узнайте, как использовать пакет Shutil для копирования файлов в Python.
Python широко используется в качестве инструмента автоматизации, и одной из основных задач автоматизации является копирование файлов из источника в место назначения.
Многие сочли бы библиотеку os синонимом таких задач, но удивительно, что os не поддерживает копирование или перемещение файлов.
В этой статье мы увидим, как мы можем использовать модуль Shutil , чтобы помочь нам перемещать файлы с одного пути на другой.
О shutil
Shutil входит в число встроенных модулей Python. Он обеспечивает доступ к некоторым высокоуровневым операциям, таким как смена владельца файлов, использование команд и операций, относящихся к файлам, таких как копирование, перемещение, архивирование и удаление.
Есть четыре способа копирования файлов в Shutil:
1.shutil.copy(src, dest)
Эта функция принимает два аргумента: путь к исходному файлу и путь назначения, оба должны быть строковым или байтовым объектом. Источником должно быть имя файла с путем, а местом назначения может быть путь к файлу или каталог. Если имя файла в источнике и месте назначения отличается, исходный файл будет скопирован в новый файл с указанным именем. Использование copy() сохраняет права доступа к файлу, но теряет его метаданные. Вот пример:
import shutil shutil.copy("/Desktop/notes.txt", "/Documents/class_notes.txt") # file will be renamed shutil.copy("/Desktop/notes.txt", "/Documents/") # file will be copied with same name
2.shutil.copyfile(src, dest)
copyfile() такой же, как copy()
и с несколькими отличиями. Путь назначения не может быть каталогом, это должен быть путь к новому файлу. Метаданные и разрешения не сохраняются.
import shutil shutil.copyfile("/Desktop/notes.txt", "/Documents/class_notes.txt") # file will be renamed
3.shutil.copyfileobj(src_obj, dest_obj)
В случаях, когда требуется скопировать файловые объекты, можно использовать функцию copyfileobj() . Здесь источник и место назначения являются файловыми объектами. Метаданные и разрешения не сохраняются. Давайте посмотрим на использование:
import shutil src_obj = open("/Desktop/notes.txt", "r") dest_obj = open("/Documents/notes.txt", "w") # file name can be different shutil.copyfileobj(src_obj, dest_obj) src_obj.close() dest_obj.close()
4.shutil.copy2(src, dest)
copy2() идентичен, за copy()
исключением того, что copy2()
сохраняет метаданные.
import shutil shutil.copy2("/Desktop/notes.txt", "/user/Documents/class_notes.txt") shutil.copy2("/Desktop/notes.txt", "/user/Documents/")