Shutil -Modul in Python

Shutil -Modul in Python
Dateiverwaltungs- und Handhabungsdateiobjekte gelten als eine der schwierigsten Aufgaben in allen Programmiersprachen. Einige Programmiersprachen bieten uns einige Tools, die die schwierigen Teile der Dateihandhabung mit einfach zu verwendenden Funktionen und Schnittstellen abstrahieren. Genau das ist Python's schließen Modul tut es auch.

Python Shutil

Python Shutil Modul ermöglicht es einem Entwickler, Dateiobjekte sehr einfach und ohne tiefere Details darüber zu verwenden, wie die Dinge unter den Abdeckungen funktionieren. Dieses Modul fasst im Grunde genommen die niedrige Semantik des Erstellens und Verwalten von Dateiobjekten ab und säubert sie, sobald es verwendet wird, und ermöglicht es uns, sich auf die Geschäftslogik der Anwendung zu konzentrieren. Wir werden hier viele Beispiele sehen, fangen wir an.

Beispiele mit Python Shutil -Modul

Wir werden verschiedene Beispiele untersuchen, die die Verwendung von Python demonstrieren schließen Modul hier.

Kopieren einer Datei

Mit dem Datei kopieren() Funktion in schließen Modul können wir eine genaue Kopie einer vorhandenen Datei überall auf der Maschine erstellen. Schauen wir uns ein Beispielprogramm an, um zu demonstrieren, wie dies getan werden kann:

OS importieren
importieren
Datei_Directory = './Dateien '
print ('Dateien vor:', Betriebssystem.ListDir (File_Directory))
schließen.Datei kopieren('./Dateien/Hallo.txt', './Dateien/Hello_again.txt')
print ('Dateien nach:', Betriebssystem.ListDir (File_Directory))

Wir haben gerade eine Datei kopiert, die im gegebenen Verzeichnis vorliegt, um die Datei in demselben Verzeichnis zu klonen. Hier ist, was wir mit diesem Befehl zurückbekommen:

Python Shutil -Dateikopie

Das Gute an dieser Funktion ist, dass die erwähnte Funktion auch als Eingabe den Namen in die neue Datei eingibt, die erstellt werden soll.

Kopieren von Dateien in ein anderes Verzeichnis

Es ist möglich, eine Datei mit Shutil in ein neues Verzeichnis zu kopieren Kopieren() Funktion. Schauen wir es uns in Aktion an:

OS importieren
importieren
drucken ('ein neues Verzeichnis machen.'))
Betriebssystem.Mkdir ('LinuxHint')
print ('Dateien vor:', Betriebssystem.ListDir ('LinuxHint'))
schließen.Kopieren('./Dateien/Hallo.txt ',' LinuxHint ')
print ('Dateien nach:', Betriebssystem.ListDir ('LinuxHint'))

Sehen wir uns die Ausgabe für diesen Befehl an:

Kopieren der Datei in ein neues Verzeichnis

Beachten Sie, dass wenn eine Datei mit dem kopiert wird Kopieren() Funktion, Berechtigungen für die Datei sind ebenfalls kloniert Metadaten der Datei werden jedoch nicht kopiert. Dies bedeutet, wenn Sie überprüfen, wann diese Datei erstellt wurde, wird die neue Zeit angezeigt, in der Sie dieses Skript ausgeführt haben.

Kopieren der Datei mit Metadaten

Im letzten Abschnitt haben wir gesehen, wie wir eine Kopie der Datei erstellen konnten. Was ist, wenn Sie einen genauen Klon einer Datei erstellen möchten, bei der die Metadaten klonen, wie bei der Datei usw. Dies ist auch möglich, aber das funktioniert möglicherweise nicht auf einem POSIX -basierten System. Schauen wir uns ein Beispiel dafür an, wie dies getan werden kann:

OS importieren
importieren
Importzeit
new_directory = 'LinuxHint'
src_file = './Dateien/Hallo.txt'
dest_file = './LinuxHint/Hallo.txt'
Def File_Metadata (Datei):
STAT_INFO = OS.Stat (Datei)
print ('modus:', oct (STAT_INFO.ST_MODE))
print ('erstellt:', Zeit.cTime (STAT_INFO.st_ctime))
print ('abgerufen:', Zeit.cTime (STAT_INFO.st_atime))
print (modifiziert: ', Zeit.cTime (STAT_INFO.st_mtime))
Betriebssystem.mkdir (new_directory)
print ('Metadaten für Quelldatei:')
Datei_metadata (SRC_FILE)
schließen.COPY2 (SRC_FILE, NEW_DIRECTORY)
print ('Metadaten für die Zieldatei:')
Datei_Metadata (dest_file)

Hier ist, was wir mit diesem Befehl zurückbekommen, wenn wir dies auf einem POSIX -basierten System ausführen (Metadaten sind nicht vollständig kloniert):

Datei mit Metadaten kopieren

Bei nicht posixbasierten Systemen hätte selbst die erstellte und aufgerufene Zeit genau übereinstimmen.

Klonen des vollständigen Verzeichnisses

Im letzten Abschnitt haben wir gesehen, wie wir eine Kopie der Datei erstellen konnten. Hier werden wir sehen, wie wir ein vollständiges Verzeichnis rekursiv klonen können. Dies bedeutet, dass wir auch kloniert werden, wenn ein anderes Verzeichnis im Verzeichnis vorhanden ist, das wir klonen möchten.

pprint importieren
importieren
OS importieren
src_directory = './Dateien '
dest_directory = './LinuxHint '
schließen.CopyTree (src_directory, dest_directory)
print ('Inhalt der Quelle:')
pprint.pprint (os.ListDir (src_directory))
print ('Inhalt des Ziels:')
pprint.pprint (os.ListDir (dest_directory))

Sehen wir uns die Ausgabe für diesen Befehl an:

Ein Verzeichnis duplizieren

Beachten Sie, dass das Verzeichnis, das wir an CopyTree () übergeben, als Das Zielverzeichnis darf nicht vorhanden sein, bevor wir dieses Programm ausführen.

Löschen eines Verzeichnisses

Das Löschen eines Verzeichnisses ist mit dem sehr einfach rmtree () Funktion im Modul. Lassen Sie uns diese Funktion hier in Aktion sehen:

pprint importieren
importieren
OS importieren
Delete_directory = 'LinuxHint' '
current_directory = '.''
print ('Inhalt vor dem Entfernen:')
pprint.pprint (os.ListDir (current_directory))
schließen.rmtree (Delete_directory)
print ('Inhalt nach Entfernung:')
pprint.pprint (os.ListDir (current_directory))

Nach dem Ausführen des Skripts, LinuxHint Verzeichnis wird zusammen mit dem Inhalt gelöscht. Hier ist, was wir mit diesem Befehl zurückbekommen:

Verzeichnis löschen

Dateien finden

Wenn Sie eine Datei finden möchten, die in der Pfadvariablen auf Ihrem Computer vorhanden ist, können wir die verwenden welche() Funktion, um diese Datei mit Namen zu finden. Schauen wir uns ein Demonstrationsbeispiel für diese Funktion an:

importieren
drucken (Shutil.welche ('bsondump'))
drucken (Shutil.welche ('ohne findig'))

Hier ist, was wir mit diesem Befehl zurückbekommen:

Datei auf dem Pfad finden

Überwachung des Dateisystems

Mit dem Shutil -Modul haben wir eine Funktion disk_usage (), über die wir auch Speicherplatzinformationen über unsere Maschine erhalten können. Schauen wir uns ein Beispiel an, das diese Daten auf menschlich lesbare Weise zeigt:

importieren
Total_b, used_b, free_b = Shutil.Festplattennutzung('.'))
GB = 10 ** 9 # GB == Gigabyte
print ('insgesamt: : 6.2f gb '.Format (Total_b / gb))
print ('verwendet: : 6.2f gb '.Format (gebraucht_b / gb))
print ('kostenlos: : 6.2f gb '.Format (free_b / gb))

Hier ist, was wir mit diesem Befehl zurückbekommen:

Dateisystem Speicherplatz finden

Archivierungsverzeichnisse

Als letztes Beispiel werden wir sehen, wie wir ein Verzeichnis Shutil -Modul archivieren können make_archive () Funktion. Schauen wir uns das Beispielprogramm an:

importieren
OS importieren
archive_directory = \
Betriebssystem.Weg.Erweiterung (Betriebssystem.Weg.join ('Ziel-Verzeichnisweg', 'LinuxHint'))
root_dir = os.Weg.Erweiterung (Betriebssystem.Weg.beitreten ('~', '.ssh '))
schließen.make_archive (archive_directory, 'gztar', root_dir)

Hier ist, was wir mit diesem Befehl zurückbekommen:

Archivierungsverzeichnis

Wenn Sie die TAR -Datei nicht anarchivieren und einen Blick darauf werfen, enthält sie alle .ssh Verzeichnisdateien darin.

Abschluss

In dieser Lektion haben wir uns angesehen, wie wir Dateiobjekte mit hochrangigen Dateioperationen einfach mit mit hohen Dateioperationen verwalten können schließen Modul in Python. Operationen wie das Kopieren von Inhalten einer Datei, erstellen Sie eine neue Kopie einer Datei usw. sah mit diesem Modul einfach aus.