Python implementa copiar y pegar archivos

Las 9 formas de copiar archivos con Python son:

shutil copyfile() 
shutil copy() 
shutil copyfileobj() 
shutil copy2()
os popen()
os system() 
threading Thread() 
subprocess call() 
subprocess check_output() 

1.Shutil Copyfile ()
1. Solo cuando se puede escribir en el destino, este método copiará el contenido de origen en la ubicación de destino. Si no tiene permiso de escritura, se producirá una excepción IOError.

copyfile (source_file, destination_file)
copia el contenido de origen en el archivo de destino.

2. Copia el contenido de origen en el archivo de destino. Si el archivo de destino no se puede escribir, la operación de copia provocará un error IO.

3. Si el archivo de origen y el archivo de destino son iguales, devolverá SameFileError.

4. Sin embargo, si el archivo de destino tiene un nombre diferente antes, la copia sobrescribirá su contenido.

5. Si el destino es un directorio, lo que significa que este método no se copiará en el directorio, se producirá el error 13.

6. No admite la copia de archivos como unidades de caracteres o bloques y conductos.

from shutil import copyfile
from sys import exit

source = input("Enter source file with full path: ")
target = input("Enter target file with full path: ")

# adding exception handling
try:
   copyfile(source, target)
except IOError as e:
   print("Unable to copy file. %s" % e)
   exit(1)
except:
   print("Unexpected error:", sys.exc_info())
   exit(1)

print("\nFile copy done!\n")

2.Método Shutil Copy ()

copyfile (archivo_origen, [archivo_destino o dir_destino])

La función del método copy () es similar al comando "cp" en Unix. Esto significa que si el destino es una carpeta, creará un nuevo archivo con el mismo nombre (nombre base) que el archivo de origen. Además, este método sincronizará los permisos del archivo de destino con el archivo de origen después de copiar el contenido del archivo de origen.

import os
import shutil

source = 'current/test/test.py'
target = '/prod/new'

assert not os.path.isabs(source)
target = os.path.join(target, os.path.dirname(source))

# create the folders if not already exists
os.makedirs(target)

# adding exception handling
try:
   shutil.copy(source, target)
except IOError as e:
   print("Unable to copy file. %s" % e)
except:
   print("Unexpected error:", sys.exc_info())

copy () vs copyfile ():

1.copy () también puede establecer bits de permiso al copiar contenido, mientras que copyfile () solo copia datos.

2. Si el destino es un directorio, copy () copiará el archivo y copyfile () fallará con el Error 13.

3. El método copyfile () usa el método copyfileobj () en el proceso de implementación, y el método copy () usa las funciones copyfile () y copymode () a su vez.

3. Método Shutil Copyfileobj ()

Este método copia el archivo en la ruta de destino o en el objeto de archivo. Si el objetivo es un objeto de archivo, debe cerrarlo después de llamar a copyfileobj (). También asume un parámetro opcional (tamaño del búfer) que puede usar para establecer la longitud del búfer. Este es el número de bytes guardados en la memoria durante el proceso de copia. El tamaño predeterminado que utiliza el sistema es de 16 KB.

from shutil import copyfileobj
status = False
if isinstance(target, string_types):
   target = open(target, 'wb')
   status = True
try:
   copyfileobj(self.stream, target, buffer_size)
finally:
   if status:
       target.close()

4.Shutil Copy2 () 方法

Aunque la función del método copy2 () es similar a copy (). Pero puede agregar el tiempo de acceso y modificación en los metadatos al copiar los datos. Copiar el mismo archivo provocará una excepción SameFileError.

copy () vs copy2 ():
1.copy () solo puede establecer bits de permiso, y copy2 () también puede usar marcas de tiempo para actualizar los metadatos del archivo.
2. copy () llama a copyfile () y copymode () dentro de la función, y copy2 () llama a copystat () para reemplazar copymode ().

5.Os método Popen ()
Este método crea una tubería para enviar o recibir comandos. Devuelve un objeto de archivo abierto que está conectado a la tubería. Puede usarlo para leer o escribir de acuerdo con el modo de apertura de archivos, como 'r' (predeterminado) o 'w'.

os.popen (comando [, modo [, tamaño de búfer]])

import os
os.popen('copy 1.txt.py 2.txt.py')

Método 6.Os System ()

Esta es la forma más común de ejecutar cualquier comando del sistema. Usando el método system (), puede llamar a cualquier comando en el subshell. Internamente, este método llamará a las funciones de biblioteca estándar del lenguaje C.
Este método devuelve el estado de salida del comando.

import os
os.system('copy 1.txt.py 2.txt.py') 

7. Utilice la biblioteca de subprocesos asíncronos Thread () para copiar archivos

Si desea copiar archivos de forma asincrónica, utilice el siguiente método. Aquí, usamos el módulo de subprocesamiento de Python para realizar operaciones de copia en segundo plano.

Cuando utilice este método, asegúrese de utilizar bloqueos para evitar interbloqueos. Si su aplicación utiliza varios subprocesos para leer / escribir archivos, puede encontrarse con esta situación.

import shutil
from threading import Thread

src="1.txt.py"
dst="3.txt.py"

Thread(target=shutil.copy, args=[src, dst]).start()

8.Llamada de subproceso ()

El módulo de subprocesos proporciona una interfaz simple para manejar subprocesos. Nos permite iniciar el proceso hijo, conectarnos a la tubería de entrada / salida / error del proceso hijo y recuperar el valor de retorno.

El módulo de subproceso está diseñado para reemplazar módulos y funciones más antiguos, como - os.system, os.spawn *, os.popen *, popen2. *

Utiliza el método call () para llamar a los comandos del sistema para realizar las tareas del usuario.

import subprocess

src="1.txt.py"
dst="2.txt.py"
cmd='copy "%s" "%s"' % (src, dst)

status = subprocess.call(cmd, shell=True)

if status != 0:
    if status < 0:
        print("Killed by signal", status)
    else:
        print("Command failed with return code - ", status)
else:
    print('Execution of %s passed!\n' % cmd)

** subproceso Check_output () **

Usando el método Check_output () en el subproceso, puede ejecutar un comando o programa externo y capturar su salida. También soporta tuberías.

import os, subprocess

src=os.path.realpath(os.getcwd() + "http://cdn.techbeamers.com/1.txt.py")
dst=os.path.realpath(os.getcwd() + "http://cdn.techbeamers.com/2.txt.py")
cmd='copy "%s" "%s"' % (src, dst)

status = subprocess.check_output(['copy', src, dst], shell=True)

print("status: ", status.decode('utf-8'))

Supongo que te gusta

Origin blog.csdn.net/liulanba/article/details/114980792
Recomendado
Clasificación