El módulo Shutil en Python proporciona muchas funciones de operaciones de alto nivel en archivos y colecciones de archivos. Viene bajo los módulos de utilidad estándar de Python. Este módulo ayuda a automatizar el proceso de copia y eliminación de archivos y directorios.
El método shutil.copy2() en Python se usa para copiar el contenido del archivo de origen al archivo o directorio de destino . Este método es idéntico al método shutil.copy() pero también intenta conservar los metadatos del archivo.
El origen debe representar un archivo, pero el destino puede ser un archivo o un directorio. Si el destino es un directorio, el archivo se copiará en el destino utilizando el nombre de archivo base del origen. también destinodebe ser escribible. Si el destino es un archivo y ya existe, se reemplazará con el archivo de origen ; de lo contrario, se creará un nuevo archivo.
Sintaxis: shutil.copy2(fuente, destino, *, seguir_enlaces simbólicos = Verdadero)
Parámetro:
fuente : una string que representa la ruta del archivo fuente.
destino : una string que representa la ruta del archivo o directorio de destino.
follow_symlinks (opcional): el valor predeterminado de este parámetro es True. Si es Falso y el origen representa un enlace simbólico, entonces intenta copiar todos los metadatos del enlace simbólico de origen al enlace simbólico de destino recién creado. Esta funcionalidad depende de la plataforma.
Nota: El ‘*’ en la lista de parámetros indica que todos los siguientes parámetros (aquí, en nuestro caso, ‘follow_symlinks’) son parámetros de solo palabras clave y se pueden proporcionar usando su nombre, no como parámetro posicional.
Tipo de devolución: este método devuelve una string que representa la ruta del archivo recién creado.
Código n.º 1: Uso del método shutil.copy2() para copiar el archivo del origen al destino
Python3
# Python program to explain shutil.copy2() method # importing os module import os # importing shutil module import shutil # path path = '/home/User/Documents' # List files and directories # in '/home/User/Documents' print("Before copying file:") print(os.listdir(path)) # Source path source = "/home/User/Documents/file.txt" # Print the metadeta # of source file metadata = os.stat(source) print("Metadata:", metadata, "\n") # Destination path destination = "/home/User/Documents/file(copy).txt" # Copy the content of # source to destination dest = shutil.copy2(source, destination) # List files and directories # in "/home / User / Documents" print("After copying file:") print(os.listdir(path)) # Print the metadata # of the destination file matadata = os.stat(destination) print("Metadata:", metadata) # Print path of newly # created file 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
Código #2: Si el destino es un directorio
Python3
# Python program to explain shutil.copy2() method # importing os module import os # importing shutil module import shutil # Source path source = "/home/User/Documents/file.txt" # Destination path destination = "/home/User/Desktop/" # Copy the content of # source to destination dest = shutil.copy2(source, destination) # List files and directories # in "/home / User / Desktop" print("After copying file:") print(os.listdir(destination)) # Print path of newly # created file 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
Código #3: Posibles errores al usar el método shutil.copy2()
Python3
# Python program to explain shutil.copy2() method # importing shutil module import shutil # If the source and destination # represents the same file # 'SameFileError' exception # will be raised # If the destination is # not writable # 'PermissionError' exception # will be raised # Source path source = "/home/User/Documents/file.txt" # Destination path destination = "/home/User/Documents/file.txt" # Copy the content of # source to destination shutil.copy2(source, destination)
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
Código #4: Manejo de errores al usar el método shutil.copy2()
Python3
# Python program to explain shutil.copy2() method # importing shutil module import shutil # Source path source = "/home/User/Documents/file.txt" # Destination path destination = "/home/User/Documents/file.txt" # Copy the content of # source to destination try: shutil.copy2(source, destination) print("File copied successfully.") # If source and destination are same except shutil.SameFileError: print("Source and destination represents the same file.") # If there is any permission issue except PermissionError: print("Permission denied.") # For other errors except: print("Error occurred while copying file.")
Source and destination represents the same file.
Referencia: https://docs.python.org/3/library/shutil.html