Python chiuso
Il modulo Python shutil consente a uno sviluppatore di utilizzare oggetti file molto facilmente e senza entrare in dettagli più approfonditi su come funzionano le cose sotto le coperte. Questo modulo fondamentalmente astrae la semantica di basso livello della creazione e della gestione degli oggetti file, pulendoli una volta completato l'uso e ci consente di concentrarci sulla logica di business dell'applicazione. Vedremo molti esempi qui, iniziamo.
Esempi con il modulo Shutil Python
Studieremo vari esempi che dimostrano l'uso di Python chiusa modulo qui.
Copiare un file
Con il copia il file() funzione in chiusa modulo, possiamo fare una copia esatta di un file esistente ovunque sulla macchina. Diamo un'occhiata a un programma di esempio per dimostrare come è possibile farlo:
importare il sistema operativoimport shutil
directory_file = './File'
print('File precedenti:', os.listdir(file_directory))
chiusa.copia il file('./File/ciao.TXT', './File/ciao_di nuovo.TXT')
print('File dopo:', os.listdir(file_directory))
Abbiamo appena copiato un file che esiste nella directory data per clonare il file nella stessa directory. Ecco cosa otteniamo indietro con questo comando:
Copia del file Shutil Python
La cosa buona di questa funzione è che la funzione menzionata prende anche come input il nome del nuovo file da creare.
Copia di file in un'altra directory
È possibile copiare un file in una nuova directory con shutil's copia() funzione. Vediamolo in azione:
importare il sistema operativoimport shutil
print('Creare una nuova directory.')
os.mkdir('LinuxHint')
print('File precedenti: ', os.listdir('LinuxHint'))
chiusa.copia('./File/ciao.txt', 'LinuxHint')
print('File dopo: ', os.listdir('LinuxHint'))
Vediamo l'output di questo comando:
Copiare il file in una nuova directory
Notare che quando un file viene copiato utilizzando il copia() funzione, anche i permessi per il file vengono clonati ma i metadati del file non vengono copiati. Ciò significa che quando controlli quando è stato creato questo file, mostrerà l'ora nuova in cui hai eseguito questo script.
Copiare file con metadati
Nell'ultima sezione, abbiamo visto come fare una copia del file. Cosa succede se si desidera creare un clone esatto di un file che comporta la clonazione anche dei suoi metadati come quando è stato creato il file ecc. Anche questo è possibile ma questo potrebbe non funzionare su un sistema basato su POSIX. Diamo un'occhiata a un esempio su come questo può essere fatto:
importare il sistema operativoimport shutil
tempo di importazione
new_directory = 'LinuxHint'
src_file = './File/ciao.TXT'
dest_file = './LinuxHint/ciao.TXT'
def file_metadata(file):
stat_info = os.statistica (file)
print('Modo :', oct(stat_info.st_mode))
print('Creato :', ora.ctime(stat_info.st_ctime))
print('Accesso:', ora.ctime(stat_info.st_atime))
print('Modificato:', ora.ctime(stat_info.st_mtime))
os.mkdir(nuova_directory)
print('Metadati per file sorgente:')
file_metadata(src_file)
chiusa.copy2(file_src, nuova_directory)
print('Metadati per il file di destinazione:')
file_metadata(dest_file)
Ecco cosa otteniamo con questo comando quando lo eseguiamo su un sistema basato su POSIX (i metadati non vengono clonati completamente):
Copia file con metadati
Sui sistemi non basati su POSIX, anche il tempo di creazione e accesso sarebbe stato esattamente uguale.
Clonazione della directory completa
Nell'ultima sezione, abbiamo visto come fare una copia del file. Qui vedremo come clonare ricorsivamente una directory completa. Ciò significa che se esiste un'altra directory nella directory che vogliamo clonare, verranno clonate anche quelle.
importa stampaimport shutil
importare il sistema operativo
directory_src = './File'
directory_destinazione = './LinuxHint'
chiusa.copytree(directory_src, directory_dest)
print('Contenuto della fonte:')
pprint.pprint(os.listdir(src_directory))
print('Contenuto della destinazione:')
pprint.pprint(os.listdir(dest_directory))
Vediamo l'output di questo comando:
Duplicazione di una directory
Nota che la directory che passiamo alla funzione copytree() come la directory di destinazione non deve esistere prima di eseguire questo programma.
Eliminazione di una directory
Eliminare una directory è molto semplice con il rmtree() funzione nel modulo. Vediamo questa funzione in azione qui:
importa stampaimport shutil
importare il sistema operativo
delete_directory = 'LinuxHint'
directory_corrente = '.'
print('Contenuto prima della rimozione:')
pprint.pprint(os.listdir(current_directory))
chiusa.rmtree(delete_directory)
print('Contenuto dopo la rimozione:')
pprint.pprint(os.listdir(current_directory))
Dopo aver eseguito lo script, LinuxSuggerimento la directory viene eliminata insieme al contenuto. Ecco cosa otteniamo indietro con questo comando:
Elimina directory
Trovare file
Se vuoi trovare un file che è presente nella variabile PATH sulla tua macchina, possiamo usare il quale() funzione per trovare quel file per nome. Diamo un'occhiata a un esempio dimostrativo per questa funzione:
import shutilprint(chiudi.which('bsondump'))
print(chiudi.which('nessun-file-trovato'))
Ecco cosa otteniamo indietro con questo comando:
Trova file su PATH
Monitoraggio dello spazio del file system
Con il modulo shutil, abbiamo una funzione disk_usage() attraverso la quale possiamo ottenere informazioni sullo spazio su disco anche sulla nostra macchina. Diamo un'occhiata a un esempio che mostra questi dati in modo leggibile dall'uomo:
import shutilb_totale, b_usato, b_libero = chiuso.uso del disco('.')
gb = 10 ** 9 # GB == gigabyte
print('Totale: :6.2f GB'.formato (totale_b / gb))
print('Usato: :6.2f GB'.formato(usato_b / gb))
print('Libero : :6.2f GB'.formato (libero_b / gb))
Ecco cosa otteniamo indietro con questo comando:
Trovare lo spazio del file system
Archiviazione directory
Come ultimo esempio, vedremo come archiviare un modulo di directory shutil make_archive() funzione. Diamo un'occhiata al programma di esempio:
import shutilimportare il sistema operativo
directory_archivio = \
os.sentiero.espandi utente(os.sentiero.join('percorso-directory-destinazione', 'linuxhint'))
root_dir = os.sentiero.espandi utente(os.sentiero.unisciti('~', '.ssh'))
chiusa.make_archive(archive_directory, 'gztar', root_dir)
Ecco cosa otteniamo indietro con questo comando:
Directory di archiviazione
Se disarchivi il file TAR e dai un'occhiata, conterrà tutte le .ssh file di directory al suo interno.
Conclusione
In questa lezione, abbiamo esaminato come possiamo gestire facilmente gli oggetti file con operazioni sui file di alto livello con chiusa modulo in Python. Operazioni come copiare il contenuto di un file, creare una nuova copia di un file ecc. sembrava facile con questo modulo.