Рубрики

Python | метод shutil.copy2 ()

Модуль Shutil в Python предоставляет множество функций высокоуровневых операций над файлами и коллекциями файлов. Он входит в стандартные утилиты Python. Этот модуль помогает автоматизировать процесс копирования и удаления файлов и каталогов.

Метод shutil.copy2() в Python используется для копирования содержимого исходного файла в конечный файл или каталог. Этот метод идентичен методу shutil.copy() но он также пытается сохранить метаданные файла.

Источник должен представлять файл, но местом назначения может быть файл или каталог. Если местом назначения является каталог, тогда файл будет скопирован в место назначения с использованием базового имени файла из источника. Кроме того, место назначения должно быть доступно для записи. Если пункт назначения является файлом и уже существует, он будет заменен исходным файлом, в противном случае будет создан новый файл.

Syntax: shutil.copy2(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 it attempts to copy all metadata from the source symbolic link to the newly-created destination symbolic link. This functionality is platform dependent.

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.

Код № 1: Использование метода shutil.copy2 () для копирования файла из источника в место назначения

# Программа Python для объяснения метода shutil.copy2 ()

    
# импорт модуля os

import os

  
# импорт модуля shutil

import shutil

  
# путь

path = '/home/User/Documents'

  
# Список файлов и каталогов
# в '/ home / User / Documents'

print("Before copying file:")

print(os.listdir(path))

  

  
# Исходный путь

source = "/home/User/Documents/file.txt"

  
# Печать метадеты
# исходного файла

metadata = os.stat(source)

print("Metadata:", metadata, "\n")

  
# Путь назначения

destination = "/home/User/Documents/file(copy).txt"

  
# Скопируйте содержимое
# источник до места назначения

dest = shutil.copy2(source, destination)

  
# Список файлов и каталогов
# в "/ home / User / Documents"

print("After copying file:")

print(os.listdir(path))

  
# Распечатать метаданные
# файла назначения

matadata = os.stat(destination)

print("Metadata:", metadata)

  
# Печать пути заново
# созданный файл

print("Destination path:", dest)

Выход:

Before copying file:
['hrithik.png', 'test.py', 'sample.txt', 'file.text', 'copy.cpp']
Metadata:  os.stat_result(st_mode=33188, st_ino=801113, st_dev=2056, st_nlink=1,
st_uid=1000, st_gid=1000, st_size=84, st_atime=1558866178, st_mtime=1558866156, 
st_ctime=1558866156) 

After copying file:
['hrithik.png', 'test.py', 'sample.txt', 'file.text', 'file(copy).txt', 'copy.cpp']
Metadata: os.stat_result(st_mode=33188, st_ino=801111, st_dev=2056, st_nlink=1,
st_uid=1000, st_gid=1000, st_size=84, st_atime=1558866178, st_mtime=1558866156,
st_ctime=1558933947)
Destination path: /home/User/Documents/file(copy).txt

Код № 2: если пункт назначения является каталогом

# Программа Python для объяснения метода shutil.copy2 ()

    
# импорт модуля os

import os

  
# импорт модуля shutil

import shutil

  

  
# Исходный путь

source = "/home/User/Documents/file.txt"

  
# Путь назначения

destination = "/home/User/Desktop/"

  
# Скопируйте содержимое
# источник до места назначения

dest = shutil.copy2(source, destination)

  
# Список файлов и каталогов
# в "/ home / User / Desktop"

print("After copying file:")

print(os.listdir(destination))

  
# Печать пути заново
# созданный файл

print("Destination path:", dest)

Выход:

After copying file:
['input.txt', 'GeeksForGeeks', 'output.txt', 'file.txt', 'web.py', 'tree.cpp']
Destination path: /home/User/Desktop/file.txt

Код № 3: Возможные ошибки при использовании метода shutil.copy2 ()

# Программа Python для объяснения метода shutil.copy2 ()

    
# импорт модуля shutil

import shutil

  

  
# Если источник и место назначения
# представляет один и тот же файл
Исключение # SameFileError
# будет поднят

  
# Если пункт назначения
# не доступно для записи
Исключение # PermissionError
# будет поднят

  

  
# Исходный путь

source = "/home/User/Documents/file.txt"

  
# Путь назначения

destination = "/home/User/Documents/file.txt"

  
# Скопируйте содержимое
# источник до места назначения
shutil.copy2(source, destintion)

Выход:

Traceback (most recent call last):
  File "try.py", line 26, in 
    dest = shutil.copy(source, destination)
  File "/usr/lib/python3.6/shutil.py", line 241, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "/usr/lib/python3.6/shutil.py", line 104, in copyfile
    raise SameFileError("{!r} and {!r} are the same file".format(src, dst))
shutil.SameFileError: '/home/User/Desktop/file.txt' and  '/home/User/Desktop/file.txt'
are the same file

Код № 4: Обработка ошибок при использовании метода shutil.copy2 ()

# Программа Python для объяснения метода shutil.copy2 ()

    
# импорт модуля shutil

import shutil

  
# Исходный путь

source = "/home/User/Documents/file.txt"

  
# Путь назначения

destination = "/home/User/Documents/file.txt"

  
# Скопируйте содержимое
# источник до места назначения

  

try:

    shutil.copy2(source, destination)

    print("File copied successfully.")

  
# Если источник и пункт назначения совпадают

except shutil.SameFileError:

    print("Source and destination represents the same file.")

  
# Если есть какие-либо проблемы с разрешением

except PermissionError:

    print("Permission denied.")

  
# Для других ошибок

except:

    print("Error occurred while copying file.")

Выход:

Source and destination represents the same file.

Ссылка: https://docs.python.org/3/library/shutil.html

Рекомендуемые посты:

Python | метод shutil.copy2 ()

0.00 (0%) 0 votes