Shutil python копирование файлов

Python | shutil.copy() method

Shutil module in Python provides many functions of high-level operations on files and collections of files. It comes under Python’s standard utility modules. This module helps in automating process of copying and removal of files and directories.
shutil.copy() method in Python is used to copy the content of source file to destination file or directory. It also preserves the file’s permission mode but other metadata of the file like the file’s creation and modification times is not preserved.
Source must represent a file but destination can be a file or a directory. If the destination is a directory then the file will be copied into destination using the base filename from source. Also, destination must be writable. If destination is a file and already exists then it will be replaced with the source file otherwise a new file will be created.

Syntax: shutil.copy(source, destination, *, follow_symlinks = True)
Parameter:
source: A string representing the path of the source file.
destination: A string representing the path of the destination file or directory.
follow_symlinks (optional) : The default value of this parameter is True. If it is False and source represents a symbolic link then destination will be created as a symbolic link.
Note: The ‘*’ in parameter list indicates that all following parameters (Here in our case ‘follow_symlinks’) are keyword-only parameters and they can be provided using their name, not as positional parameter.
Return Type: This method returns a string which represents the path of newly created file.

Code #1: Use of shutil.copy() method to copy file from source to destination

Читайте также:  Чем котлин отличается от java

Источник

Копирование файла в Python

способы копирование файла Python

В наших предыдущих руководствах мы изучили некоторые операции с файлами Python, такие как чтение, запись и удаление.

Мы можем скопировать файл в Python, используя различные методы в нижеперечисленных модулях,

В этом руководстве мы научимся использовать различные методы, предоставляемые вышеуказанными модулями, для копирования файла в Python.

1 shutil модуль

Модуль shutil предоставляет несколько простых в использовании методов, с помощью которых мы можем удалить или скопировать файл. Давайте посмотрим на различные методы, определенные в этом модуле, специально используемые для копирования.

1 copyfileobj()

Метод copyfileobj() копирует содержимое исходного файла в целевой файл, используя соответствующие файловые объекты. Давайте посмотрим на код ниже,

import shutil src_file_obj=open('src.txt', 'rb') targ_file_obj= open('targ.txt' , 'wb') shutil.copyfileobj( src_file_obj , targ_file_obj )

Примечание: объекты файлов должны указывать на позиции 0 (начальную позицию) для соответствующих исходных и целевых файлов, чтобы скопировать все содержимое.

2 copyfile()

Метод copyfile() копирует содержимое из исходного файла в целевой файл, используя пути к файлам. Он возвращает путь к целевому файлу. Путь к целевому файлу должен быть доступен для записи, иначе возникнет исключение OSerror.

import shutil shutil.copyfile( 'src.txt' , 'targ.txt' )

Следует иметь в виду, что метод позволяет использовать только пути к файлам, а не каталоги.

3 copy()

Этот метод копирует исходный файл в целевой файл или целевой каталог. В отличие от copyfile() , метод copy() позволяет использовать целевой каталог в качестве аргумента, а также копирует права доступа к файлу. copy() возвращает путь к целевому файлу после копирования содержимого.

import shutil shutil.copy('/Users/test/file.txt', '/Users/target/')

В целевом месте назначения создается файл с именем file.txt со всем содержимым и разрешениями, скопированными из /Users/test/file.txt.

4 copy2()

Метод copy2() используется точно так же, как метод copy() . Они также работают аналогичным образом, за исключением того факта, что copy2() также копирует метаданные из исходного файла.

import shutil shutil.copy2('/Users/test/file.txt', '/Users/target/')

2 Модуль os

1 popen()

Метод popen() создает канал к команде cmd. Метод возвращает файловый объект, подключенный к каналу cmd. Взгляните на код ниже,

#for Windows import os os.popen('copy src.txt targ.txt' )
#for Linux import os os.popen('cp src.txt targ.txt' )

С помощью этого метода мы можем выполнять другие обычные команды.

2 system()

Метод system() напрямую вызывает и выполняет аргумент команды в подоболочке. Его возвращаемое значение зависит от ОС, в которой запущена программа. Для Linux это статус выхода, тогда как для Windows это значение, возвращаемое системной оболочкой.

#for Linux import os os.system(' cp src.txt targ.txt' )
#for Windows import os os.system(' copy src.txt targ.txt' )

3 Модуль подпроцесса

1. call()

Метод call() аналогичный os.system() напрямую вызывает или запускает команду, переданную в качестве аргумента функции.

# In Linux import subprocess subprocess.call('cp source.txt target.txt', shell=True)
# In Windows import subprocess subprocess.call('copy source.txt target.txt', shell=True)

Ссылки

  • https://docs.python.org/3/library/subprocess.html#subprocess.call
  • https://docs.python.org/2/library/os.html
  • https://docs.python.org/3/library/shutil.html
  • https://stackoverflow.com/questions/123198/how-do-i-copy-a-file-in-python

Источник

Модуль shutil

Python 3 логотип

Модуль shutil содержит набор функций высокого уровня для обработки файлов, групп файлов, и папок. В частности, доступные здесь функции позволяют копировать, перемещать и удалять файлы и папки. Часто используется вместе с модулем os.

Операции над файлами и директориями

shutil.copyfileobj(fsrc, fdst[, length]) — скопировать содержимое одного файлового объекта (fsrc) в другой (fdst). Необязательный параметр length — размер буфера при копировании (чтобы весь, возможно огромный, файл не читался целиком в память).

При этом, если позиция указателя в fsrc не 0 (т.е. до этого было сделано что-то наподобие fsrc.read(47)), то будет копироваться содержимое начиная с текущей позиции, а не с начала файла.

shutil.copyfile(src, dst, follow_symlinks=True) — копирует содержимое (но не метаданные) файла src в файл dst. Возвращает dst (т.е. куда файл был скопирован). src и dst это строки — пути к файлам. dst должен быть полным именем файла.

Если src и dst представляют собой один и тот же файл, исключение shutil.SameFileError.

Если dst существует, то он будет перезаписан.

Если follow_symlinks=False и src является ссылкой на файл, то будет создана новая символическая ссылка вместо копирования файла, на который эта символическая ссылка указывает.

shutil.copymode(src, dst, follow_symlinks=True) — копирует права доступа из src в dst. Содержимое файла, владелец, и группа не меняются.

shutil.copystat(src, dst, follow_symlinks=True) — копирует права доступа, время последнего доступа, последнего изменения, и флаги src в dst. Содержимое файла, владелец, и группа не меняются.

shutil.copy(src, dst, follow_symlinks=True) — копирует содержимое файла src в файл или папку dst. Если dst является директорией, файл будет скопирован с тем же названием, что было в src. Функция возвращает путь к местонахождению нового скопированного файла.

Если follow_symlinks=False, и src это ссылка, dst будет ссылкой.

Если follow_symlinks=True, и src это ссылка, dst будет копией файла, на который ссылается src

copy() копирует содержимое файла, и права доступа.

shutil.copy2(src, dst, follow_symlinks=True) — как copy(), но пытается копировать все метаданные.

shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False) — рекурсивно копирует всё дерево директорий с корнем в src, возвращает директорию назначения.

Директория dst не должна существовать. Она будет создана, вместе с пропущенными родительскими директориями.

Права и времена у директорий копируются copystat(), файлы копируются с помощью функции copy_function (по умолчанию shutil.copy2()).

Если symlinks=True, ссылки в дереве src будут ссылками в dst, и метаданные будут скопированы настолько, насколько это возможно.

Если False (по умолчанию), будут скопированы содержимое и метаданные файлов, на которые указывали ссылки.

Если symlinks=False, если файл, на который указывает ссылка, не существует, будет добавлено исключение в список ошибок, в исключении shutil.Error в конце копирования.

Можно установить флаг ignore_dangling_symlinks=True, чтобы скрыть данную ошибку.

Если ignore не None, то это должна быть функция, принимающая в качестве аргументов имя директории, в которой сейчас copytree(), и список содержимого, возвращаемый os.listdir(). Т.к. copytree() вызывается рекурсивно, ignore вызывается 1 раз для каждой поддиректории. Она должна возвращать список объектов относительно текущего имени директории (т.е. подмножество элементов во втором аргументе). Эти объекты не будут скопированы.

shutil.ignore_patterns(*patterns) — функция, которая создаёт функцию, которая может быть использована в качестве ignore для copytree(), игнорируя файлы и директории, которые соответствуют glob-style шаблонам.

shutil.rmtree(path, ignore_errors=False, onerror=None) — Удаляет текущую директорию и все поддиректории; path должен указывать на директорию, а не на символическую ссылку.

Если ignore_errors=True, то ошибки, возникающие в результате неудавшегося удаления, будут проигнорированы. Если False (по умолчанию), эти ошибки будут передаваться обработчику onerror, или, если его нет, то исключение.

На ОС, которые поддерживают функции на основе файловых дескрипторов, по умолчанию используется версия rmtree(), не уязвимая к атакам на символические ссылки.

На других платформах это не так: при подобранном времени и обстоятельствах «хакер» может, манипулируя ссылками, удалить файлы, которые недоступны ему в других обстоятельствах.

Чтобы проверить, уязвима ли система к подобным атакам, можно использовать атрибут rmtree.avoids_symlink_attacks.

Если задан onerror, это должна быть функция с 3 параметрами: function, path, excinfo.

Первый параметр, function, это функция, которая создала исключение; она зависит от платформы и интерпретатора. Второй параметр, path, это путь, передаваемый функции. Третий параметр, excinfo — это информация об исключении, возвращаемая sys.exc_info(). Исключения, вызванные onerror, не обрабатываются.

shutil.move(src, dst, copy_function=copy2) — рекурсивно перемещает файл или директорию (src) в другое место (dst), и возвращает место назначения.

Если dst — существующая директория, то src перемещается внутрь директории. Если dst существует, но не директория, то оно может быть перезаписано.

shutil.disk_usage(path) — возвращает статистику использования дискового пространства как namedtuple с атрибутами total, used и free, в байтах.

shutil.chown(path, user=None, group=None) — меняет владельца и/или группу у файла или директории.

shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None) — возвращает путь к исполняемому файлу по заданной команде. Если нет соответствия ни с одним файлом, то None. mode это права доступа, требующиеся от файла, по умолчанию ищет только исполняемые.

Архивация

Высокоуровневые функции для созданиия и чтения архивированных и сжатых файлов. Основаны на функциях из модулей zipfile и tarfile.

shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]]) — создаёт архив и возвращает его имя.

base_name это имя файла для создания, включая путь, но не включая расширения (не нужно писать «.zip» и т.д.).

root_dir — директория (относительно текущей), которую мы архивируем.

base_dir — директория, в которую будет архивироваться (т.е. все файлы в архиве будут в данной папке).

Если dry_run=True, архив не будет создан, но операции, которые должны были быть выполнены, запишутся в logger.

owner и group используются при создании tar-архива.

shutil.get_archive_formats() — список доступных форматов для архивирования.

shutil.unpack_archive(filename[, extract_dir[, format]]) — распаковывает архив. filename — полный путь к архиву.

extract_dir — то, куда будет извлекаться содержимое (по умолчанию в текущую).

format — формат архива (по умолчанию пытается угадать по расширению файла).

shutil.get_unpack_formats() — список доступных форматов для разархивирования.

Запрос размера терминала вывода

shutil.get_terminal_size(fallback=(columns, lines)) — возвращает размер окна терминала.

fallback вернётся, если не удалось узнать размер терминала (терминал не поддерживает такие запросы, или программа работает без терминала). По умолчанию (80, 24).

Для вставки кода на Python в комментарий заключайте его в теги

  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов

Источник

Оцените статью