Cómo copiar un archivo en Python
-
Shutil
copyfile()
Método para copiar archivos en Python -
Shutil
copy()
Método para copiar el archivo con permisos -
Comparación entre el método
copy()
ycopyfile()
-
copyfileobj()
Método para copiar el objeto de archivo -
copy2()
Método para preservar los metadatos - Conclusión de los métodos de copia de 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()
- El método
copy()
a menudo establece el permiso de archivo mientras se copia el contenido, mientras que elcopyfile()
sólo copia los datos. - Esencialmente, en su implementación, el método
copyfile()
utiliza el métodocopyfileobj()
. En comparación, el métodocopy()
utiliza las funcionescopyfile()
ycopymode()
. - El punto anterior deja claro que
copyfile()
será un poco más rápido quecopy()
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 | Sí | No | Sí |
shutil.copyfile |
No | No | No | No |
shutil.copy2 |
Sí | Sí | No | Sí |
shutil.copyfileobj |
No | No | Sí | No |