¿Aprendiendo Python? Aquí se explica cómo copiar un archivo
¿Quieres mejorar tu habilidad con Python? Luego, puede intentar realizar algunas tareas en su computadora con Python. Copiar y pegar archivos de un directorio a otro con Python es una forma divertida de hacer esto.
Además de ser divertido, te permite leer y escribir archivos rápidamente sin distraerte de tu código. Si eres nuevo en Python, es una habilidad que quizás necesites aprender de una forma u otra. Entonces, descubramos cómo copiar archivos con Python a través de esta publicación.
Requisitos para copiar archivos con Python
Hay muchas formas de copiar y pegar archivos con Python. Por lo tanto, el requisito para hacerlo varía y depende del método que decida utilizar.
Si bien es posible que no necesite módulos adicionales para copiar archivos con Python, aún puede usar bibliotecas integradas si lo desea.
Por ejemplo, si desea utilizar el método os , debe importarlo a su código. Sin embargo, una de las formas populares de copiar archivos con Python es usar la biblioteca shutil .
Veamos cómo podemos usar estos diversos métodos para copiar archivos con Python.
Cómo copiar archivos usando la biblioteca Shutil incorporada de Python
El módulo shutil es una potente biblioteca de Python incorporada para leer y escribir archivos rápidamente en Python.
Para usarlo, solo necesita proporcionar la ruta completa de los archivos de origen y destino.
En esencia, shutil toma este formato:
shutil.copy([source directory path], [destination directory path], follow_symlinks=True)
Por ejemplo, el código siguiente usa shutil.copy () para copiar un archivo llamado copy.txt de una carpeta llamada my_folder a otra llamada destino . Luego cambia el nombre del archivo de destino como newFile.txt :
import shutil
sourceFile = "C:/Users/some_directories/my_folder/copy.txt"
destinationFile = "C:/Users/some_directories/destination/newFile.txt"
shutil.copy(sourceFile, destinationFile, follow_symlinks=True)
Tenga en cuenta que puede escribir su código en cualquier editor de código de su elección . Luego puede ejecutarlo usando la línea de comando.
Sin embargo, también puede usar el entorno de desarrollo integrado de Python (IDLE) predeterminado si no está familiarizado con la ejecución de Python a través de la línea de comandos.
El método shutil.copy no copia los metadatos del archivo fuente. En esencia, su máquina ve el archivo de destino como uno completamente nuevo y le proporciona nuevos metadatos.
Sin embargo, para copiar los metadatos junto con el archivo original, use el método shutil.copy2 :
import shutil
shutil.copy2(sourceFile, destinationFile, follow_symlinks=True)
El método anterior conserva los metadatos originales del archivo antiguo en el archivo de destino. Por ejemplo, el archivo de destino conserva la fecha en que creó el archivo de origen, su tamaño y otros atributos.
El argumento follow_symlinks es una declaración de enlace simbólico que permite a shutil seguir una ruta absoluta. Por lo tanto, debe incluirlo si los archivos de origen y destino se encuentran en directorios diferentes.
Pero si ambos archivos están en su directorio de trabajo actual, no necesita incluir un follow_symlinks . Si lo hace, Python genera una excepción de sintaxis.
Entonces, si está pegando el archivo fuente en su directorio de trabajo actual, su código debería verse así:
import shutil
shutil.copy2(sourceFile, destinationFile)
Además de usar los métodos shutil anteriores, también puede usar shutil.copyfile o shutil.copyfileobj .
Usar shutil.copyfileobj es un poco diferente ya que requiere la función abierta incorporada. Luego, necesita leer y escribir binario incluyendo los argumentos "rb" y "wb" .
Veamos cómo funciona el método shutil.copyfileobj usando los mismos directorios que usamos anteriormente:
import shutil
sourceFilePath = open("C:/Users/some_directories/my_folder/copy.txt", "rb")
destinationFilePath = open("C:/Users/some_directories/destination/newFile.txt", "wb")
shutil.copyfileobj(sourceFilePath, destinationFilePath)
Tenga en cuenta que shutil.copyfileobj () no requiere el argumento follow_symlinks .
Sin embargo, shutil.copyfile () funciona de la misma manera que .copy y .copy2 . Solo difieren insignificantemente en sus funciones internas.
Para usar el método shutil.copyfile () :
import shutil
sourceFilePath = "C:/Users/some_directories/my_folder/copy.txt"
destinationFilePath = "C:/Users/some_directories/destination/newFile.txt"
shutil.copyfile(sourceFilePath, destinationFilePath)
Cómo copiar archivos con el módulo del sistema operativo
El módulo os utiliza dos métodos integrados para copiar archivos; métodos os.system () y os.popen () .
El método os.system () le permite imitar el entorno de la línea de comandos.
Sin embargo, una deficiencia de los métodos del sistema operativo es que solo copian archivos dentro de su directorio de trabajo actual.
Para usar el método os.system () en Windows:
import os
os.system('copy source.txt destination.txt)
También puede usar el comando de terminal de Windows xcopy integrado :
import os
os.system('xcopy source.txt destination.txt)
Para usar el método os.system en Linux, reemplace copy con cp :
import os
os.system('cp source.txt destination.txt)
Cómo copiar archivos usando el método os.popen
Para usar este método, reemplace os.system () con os.popen () .
En Windows, use:
import os
os.popen('copy source.txt destination.txt)
Como hicimos con os.system () , reemplace copy con cp para usar este método en Linux:
import os
os.popen('cp source.txt destination.txt)
Cómo copiar archivos con el módulo de subproceso de Python
Además de los métodos anteriores, también puede usar la biblioteca subprocess () para copiar archivos en Python:
import subprocess as sp
sp.call("copy sourceFile destinationFile", shell=True)
Sin embargo, en Linux, use:
import subprocess as sp
sp.call("cp sourceFile destinationFile", shell=True)
La biblioteca de subprocesos también usa el método subprocess.check_out () . Funciona de la misma manera que lo hace subprocess.call () :
import subprocess as sp
sp.check_out("copy sourceFile destinationFile", shell=True)
En Linux, reemplace copy con cp :
import subprocess as sp
sp.check_out("cp sourceFile destinationFIle", shell=True)
Sin embargo, al igual que los métodos del sistema operativo, los métodos de subproceso solo funcionan con archivos en su directorio de trabajo actual.
Nota: también puede copiar archivos en una carpeta si está en el mismo directorio de trabajo que el archivo de origen. Todo lo que necesita hacer es reemplazar el nombre del archivo de destino con el nombre de la carpeta de destino. Sin embargo, asegúrese de que la carpeta de destino y el archivo de origen estén en su directorio de trabajo actual.
Cómo copiar archivos en Python sin usar bibliotecas
También puede copiar archivos en Python sin depender de ninguna biblioteca. Al igual que el método shutil, solo necesita las rutas completas de los directorios de origen y destino.
He aquí cómo lograr esto:
sourcePath = "C:/Users/source_directories/my_folder/copy.txt"
destinationPath = "C:/Users/some_directories/destination_directories/newFile.txt"
with open(sourcePath, "rb") as read:
with open(destinationPath, "wb") as myfile:
myfile.write(read.read())
Para que el código sea reutilizable , puede modificarlo en una función:
def copyFile(source=None, destination=None):
if not (source and destination)==None:
with open(source, "rb") as read:
with open(destination, "wb") as myfile:
myfile.write(read.read())
else:
print("Please enter the source and destination paths")
copyFile(sourcePath, destinationPath)
Eso es. Acaba de hacer una copiadora de archivos reutilizable con Python sin usar ninguna biblioteca.
Siga automatizando tareas con Python
Además de ayudarlo a mantenerse enfocado en su código mientras crea proyectos, copiar archivos con Python le permite comprender mejor la administración de archivos con Python. Sin embargo, jugar con las tareas de Python es una forma de mejorar tu habilidad de Python, especialmente si eres un principiante.
Por ejemplo, puede cambiar la fecha y la hora en su PC con el módulo del sistema operativo. Incluso puede escribir comandos de bash personalizados con Python si lo desea.