Copia un file in Python

Azaz Farooq 21 marzo 2022
  1. Shutil copyfile() Metodo per copiare file in Python
  2. Shutil metodo copy() per copiare file con permessi
  3. Confronto tra il metodo copy() e copyfile()
  4. Metodo copyfileobj() per copiare l’oggetto file
  5. Metodo copy2() per conservare i metadati
  6. Conclusione dei metodi per copiare un file in Python
Copia un file in Python

Python viene fornito con diversi moduli predefiniti per supportare le operazioni di I/O sui file (come OS, subprocess e shutil). Copierete semplicemente file e directory usando il modulo shutil. Le operazioni come la duplicazione, il trasferimento o l’eliminazione di file e directory vengono completate utilizzando questa funzione di utilità. Qui vengono discussi quattro metodi come segue.

Shutil copyfile() Metodo per copiare file in Python

Copia il materiale di origine in un file con nome di destinazione. Se il target non è scrivibile, si verificherà un’eccezione IOError nel processo di copia. Se i file di origine e di destinazione sono gli stessi, restituisce SameFileError. I nomi di percorso dell’origine e della destinazione vengono forniti come stringhe.

copyfile(source_file, destination_file)

I dispositivi a caratteri o a blocchi e le pipe non sono supportati da questo metodo.

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 metodo copy() per copiare file con permessi

Il metodo copy() funziona come il comando Unix cp. Dopo aver copiato il suo contenuto, questo metodo sincronizza le autorizzazioni del file di destinazione con il file di origine. Se stai copiando lo stesso file, viene lanciato anche SameFileError. La sua sintassi è la seguente.

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

Esempio di metodo Shutil copy() per copiare file con autorizzazioni

import shutil

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

Confronto tra il metodo copy() e copyfile()

  1. Il metodo copy() spesso imposta i permessi del file quando i contenuti vengono copiati, mentre copyfile() copia solo i dati.
  2. Essenzialmente, nella sua implementazione, il metodo copyfile() utilizza il metodo copyfileobj(). In confronto, il metodo copy() utilizza le funzioni copyfile() e copymode().
  3. Il punto precedente rende chiaro che copyfile() sarà un po’ più veloce di copy() perché c’è un lavoro extra a portata di mano con quest’ultimo (conservazione dei permessi).

Metodo copyfileobj() per copiare l’oggetto file

Questa funzione copia il file nell’oggetto del percorso o del file di destinazione. Se l’oggetto di destinazione è un oggetto file, è necessario chiuderlo dopo aver chiamato direttamente copyfileobj(). La dimensione del buffer viene utilizzata per specificare la lunghezza del buffer. È il numero di byte conservati in memoria durante il processo di copia.

La sintassi del metodo copyfileobj() è di seguito.

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)

Metodo copy2() per conservare i metadati

Il metodo copy2() è simile al metodo copy(), ma oltre a copiare il contenuto del file, conserva anche tutti i metadati del file sorgente.

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)

Conclusione dei metodi per copiare un file in Python

Alla fine, una tabella è allegata per tutti i metodi e aiuta a capire meglio l’utilità shutil.

Funzione copia i metadati copia i permessi può usare il buffer la destinazione può essere directory
shutil.copy No No
shutil.copyfile No No No No
shutil.copy2 No
shutil.copyfileobj No No No

Articolo correlato - Python File