Cómo copiar un archivo en Python

Azaz Farooq 30 enero 2023
  1. Shutil copyfile() Método para copiar archivos en Python
  2. Shutil copy() Método para copiar el archivo con permisos
  3. Comparación entre el método copy() y copyfile()
  4. copyfileobj() Método para copiar el objeto de archivo
  5. copy2() Método para preservar los metadatos
  6. Conclusión de los métodos de copia de un archivo en Python
Cómo copiar un archivo en Python

Python viene con varios módulos listos para usar que soportan operaciones de E/S de archivos (como SO, subproceso y shutil). Simplemente copiará los archivos y directorios usando el módulo shutil. Operaciones como duplicar, transferir o borrar archivos y directorios se completan usando esta función de utilidad. Aquí se discuten cuatro métodos de la siguiente manera.

Shutil copyfile() Método para copiar archivos en Python

Copia el material de origen a un archivo de destino. Si el destino no es escribible, se producirá una excepción de IOError en el proceso de copia. Si los archivos de origen y de destino son los mismos, SameFileError regresa. Las rutas del origen y del destino se proporcionan como cadenas.

copyfile(source_file, destination_file)

Los dispositivos de caracteres o bloques y las tuberías no son compatibles con este método.

import shutil

source = r"C:\Users\DelftStack\Documents\test\test.txt"
destination = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copyfile(source, destination)

Shutil copy() Método para copiar el archivo con permisos

El método copy() funciona como el comando cp de Unix. Al copiar su contenido, este método sincroniza los permisos del archivo de destino con el archivo de origen. Si estás copiando el mismo archivo, también lanza el SameFileError. Su sintaxis es la siguiente.

shutil.copy(src_file, dest_file, *, follow_symlinks=True)

Ejemplo de Shutil copy() Método para copiar el archivo con permisos

import shutil

src = r"C:\Users\DelftStack\Documents\test\test.txt"
des = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copy(src, des)

Comparación entre el método copy() y copyfile()

  1. El método copy() a menudo establece el permiso de archivo mientras se copia el contenido, mientras que el copyfile() sólo copia los datos.
  2. Esencialmente, en su implementación, el método copyfile() utiliza el método copyfileobj(). En comparación, el método copy() utiliza las funciones copyfile() y copymode().
  3. El punto anterior deja claro que copyfile() será un poco más rápido que copy() porque hay un trabajo extra a mano con este último (preservación de los permisos).

copyfileobj() Método para copiar el objeto de archivo

Esta función copia el archivo al objeto de la ruta o archivo de destino. Si el objeto de destino es un objeto de archivo, necesita cerrarlo después de llamar copyfileobj() directamente. El tamaño del búfer se utiliza para especificar la longitud del mismo. Es el número de bytes retenidos en la memoria durante el proceso de copia.

La sintaxis del método copyfileobj() está más abajo.

shutil.copyfileobj(src_file_object, dest_file_object[, length])
import shutil

filename1 = r"C:\Users\DelftStack\Documents\test\test.txt"
fileA = open(filename1, "rb")
filename2 = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
fileB = open(filename2, "wb")
shutil.copyfileobj(fileA, fileB)

copy2() Método para preservar los metadatos

El método copy2() es similar al método copy(), pero además de copiar el contenido del archivo, también conserva todos los metadatos del archivo de origen.

shutil.copy2(src_file, dest_file, *, follow_symlinks=True)

import shutil

src = r"C:\Users\DelftStack\Documents\test\test.txt"
des = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copy2(src, des)

Conclusión de los métodos de copia de un archivo en Python

Al final, se adjunta una tabla para todos los métodos y ayuda a entender mejor la utilidad shutil.

Función copias de metadatos permisos de copia puede usar el buffer El destino puede ser el directorio
shutil.copy No No
shutil.copyfile No No No No
shutil.copy2 No
shutil.copyfileobj No No No

Artículo relacionado - Python File