In un precedente tutorial, ho discusso di come possiamo leggere, aprire, chiudere e scrivere sui file. In questo tutorial, andrò oltre e discuterò le diverse operazioni che possiamo eseguire su file e directory (cartelle).
Sai, ad esempio, usiamo molto i file e lavorare con i file va oltre l'apertura e la chiusura del file. Ti ricordi quante volte hai copiato quel file specifico? Oh, o quando hai rinominato il file che hai scaricato da qualche sito Web perché aveva un nome privo di significato? Questi sono alcuni tipi di operazioni che ho intenzione di discutere in questo tutorial.
Pronto? Andiamo al punto e iniziamo a fare cose interessanti con i nostri file e le nostre directory usando Python!
shutil
(Shell Utilities) è il nome del modulo che verrà utilizzato in questo tutorial per eseguire diverse operazioni su file e directory. shutil
già viene fornito con l'installazione di Python, quindi non è necessario installarlo manualmente. Per poter utilizzare questo modulo, tutto ciò che devi fare è importare
il modulo:
importazione chiusa
Iniziamo con la nostra prima operazione, cioè, copia dei file. Per farlo, useremo il copia()
funzione dal shutil
modulo. Userò il file sample.pdf negli esempi di questo tutorial. Puoi sentirti libero di scaricare questo file o utilizzare qualsiasi file che ti piace.
Il seguente semplice script ti mostrerà come copiare esempio.pdf
dal desktop (dove si trova originariamente) in un'altra directory Temp
, che si trova anche sul desktop:
importare shutil.copy ('sample.pdf', 'Temp')
Si noti che ho solo elencato il nome del file e il nome della directory, dal momento che sto lavorando con il mio terminale con il desktop che è il percorso che sto usando. È invece possibile specificare il percorso completo sia per il file che si desidera copiare sia per la directory in cui si desidera copiare il file, che nel mio caso è il seguente:
shutil.copy ('/ Users / Abder / Desktop / sample.pdf', '/ Users / Abder / Desktop / Temp')
Vai avanti, apri il Temp
directory o qualsiasi directory specificata e dovresti trovare il file copiato lì!
Cosa succede se il secondo argomento era un file invece di una directory? In altre parole, diciamo che hai digitato quanto segue (ho rimosso il percorso completo dei file, supponendo che siano entrambi sul desktop):
import shutil shutil.copy ('sample.pdf', 'file.pdf')
In questo caso, avrai un nuovo file file.pdf
, che è una copia del file originale esempio.pdf
. Quindi, se apri file.pdf
, noterai che ha lo stesso contenuto perché in realtà è una copia di esempio.pdf
.
La fonte e la destinazione possono essere uguali? Proviamo e vediamo.
shutil.copy ('sample.pdf', 'sample.pdf'
)
Sembra che questa operazione ci porti un errore poiché i nomi dei file non dovrebbero essere gli stessi:
Traceback (ultima chiamata più recente): File "test.py", riga 2, inshutil.copy ('sample.pdf', 'sample.pdf') File "/usr/local/Cellar/python/2.7.10_2/Framework/Python.framework/Versions/2.7/lib/python2.7/shutil.py ", riga 119, in copia copyfile (src, dst) File" /usr/local/Cellar/python/2.7.10_2/Framework/Python.framework/Versions/2.7/lib/python2.7/shutil.py ", riga 69, in copyfile raise Error ("'% s' e '% s' sono lo stesso file"% (src, dst)) shutil.Error: 'sample.pdf' e 'sample.pdf' sono lo stesso file
In questa sezione vedremo come possiamo copiare un'intera directory (cartella) piuttosto che un singolo file, come abbiamo visto nella sezione precedente.
Diciamo che abbiamo la seguente struttura di directory che vogliamo copiare. Cioè, abbiamo una directory principale Originale
, che contiene una directory Original-1
, che contiene la directory Original-2
, e che contiene la directory Original-3
, e in Original-3
abbiamo il nostro file esempio.pdf
(phew ...).
Quello che vogliamo fare ora è copiare la directory Originale
con tutti i suoi contenuti in una nuova directory e chiama quella nuova directory Copia originale
.
Questo può essere fatto semplicemente usando il copytree ()
funzione, come segue (assumendo che tutto stia accadendo sul desktop):
import shutil shutil.copytree ('Original', 'Original-Copy')
Ora dovresti trovare una nuova directory Copia originale
con tutto il contenuto e la struttura di Originale
.
Lo spostamento di un file è come fare un cut-incolla operazione sul file. Nel Copia di file sezione abbiamo visto come fare una copia di un file, mantenendo il file originale nella sua posizione originale.
In questa sezione, vedremo come spostare (tagliare) il file in una nuova posizione, rimuovendolo allo stesso tempo dalla sua posizione originale. Questa operazione viene eseguita semplicemente utilizzando il mossa()
funzione, come segue:
import shutil shutil.move ('Sample.pdf', 'Temp')
Notare che esempio.pdf
è stato spostato nella directory Temp
, e non esiste più sul desktop.
Cosa succede se ci spostiamo esempio.pdf
a un nuovo file New-esempio.pdf
, come segue?
import shutil shutil.move ('Sample.pdf', 'New-Sample.pdf')
In questo caso, avrai solo New-esempio.pdf
con lo stesso contenuto di esempio.pdf
, ma esempio.pdf
non esiste più.
Le directory in movimento vengono eseguite utilizzando la stessa funzione utilizzata in Spostare i file sezione, cioè mossa()
. Usiamo lo stesso esempio del Copia di directory sezione, ma ora con il mossa()
funzione.
import shutil shutil.move ('Original', 'Original-Copy')
In questo caso, avrai una nuova directory Copia originale
con lo stesso contenuto di Originale
, ma Originale
non esiste più.
Indovina un po? Puoi anche usare il mossa()
funzione a rinominare un file o una directory. Non ripeterò più gli esempi in questa sezione. Ma, se hai notato quando si applica il mossa()
funzione su entrambi i file e le directory di cui sopra, abbiamo detto che il file / directory originale non esiste più, ma esiste un nuovo file / directory con lo stesso contenuto. È come rinominare un file / directory, non è vero??
Sembra che il shutil
il modulo non contiene una funzione per l'eliminazione File. Tuttavia, contiene una funzione per l'eliminazione delle directory: rmtree ()
. Fai attenzione perché la cancellazione è permanente e quindi lo farai non trova la directory cancellata nel Cestino.
L'esempio seguente mostra come possiamo eliminare definitivamente il file Copia originale
directory:
import shutil.rmtree ('Copia originale')
Se si desidera eliminare in modo permanente a file, puoi usare il rimuovere()
funzione da Python os
modulo, come segue:
import os os.remove ('Sample.pdf')
Come puoi vedere, siamo stati in grado di eseguire operazioni importanti su file e directory, copiare, spostare, rinominare ed eliminare molto facilmente attraverso i moduli shutil e os. Puoi consultare la documentazione di questi moduli per maggiori informazioni su cosa puoi fare con loro.