Python-Shutil
Das Python Shutil-Modul ermöglicht es einem Entwickler, Dateiobjekte sehr einfach zu verwenden und ohne tiefer ins Detail zu gehen, wie die Dinge unter der Decke funktionieren. Dieses Modul abstrahiert im Wesentlichen die Low-Level-Semantik des Erstellens und Verwaltens von Dateiobjekten, bereinigt sie nach Abschluss der Verwendung und ermöglicht es uns, uns auf die Geschäftslogik der Anwendung zu konzentrieren. Wir werden hier viele Beispiele sehen, lass uns loslegen.
Beispiele mit Python-Shutil-Modul
Wir werden verschiedene Beispiele studieren, die die Verwendung von Python demonstrieren Shutil Modul hier.
Kopieren einer Datei
Mit dem Datei kopieren() Funktion in Shutil Modul können wir eine exakte Kopie einer vorhandenen Datei an einer beliebigen Stelle auf der Maschine erstellen. Sehen wir uns ein Beispielprogramm an, um zu demonstrieren, wie dies getan werden kann:
Importieren von OSShutil importieren
Dateiverzeichnis = './Dateien'
print('Dateien vor:', os.listdir(file_directory))
Shutil.Datei kopieren('./Dateien/hallo.TXT', './Dateien/hello_again.TXT')
print('Dateien nach:', os.listdir(file_directory))
Wir haben gerade eine Datei kopiert, die im angegebenen Verzeichnis vorhanden ist, um die Datei im selben Verzeichnis zu klonen. Folgendes erhalten wir mit diesem Befehl zurück:
Python Shutil-Datei kopieren
Das Gute an dieser Funktion ist, dass die genannte Funktion auch den Namen der neu zu erstellenden Datei als Eingabe übernimmt takes.
Kopieren von Dateien in ein anderes Verzeichnis
Es ist möglich, eine Datei mit Shutil's . in ein neues Verzeichnis zu kopieren Kopieren() Funktion. Sehen wir es uns in Aktion an:
Importieren von OSShutil importieren
print('Neues Verzeichnis erstellen.')
os.mkdir('LinuxHinweis')
print('Dateien vorher:', os.listdir('LinuxHint'))
Shutil.Kopieren('./Dateien/hallo.txt', 'LinuxHint')
print('Dateien nach:', os.listdir('LinuxHint'))
Sehen wir uns die Ausgabe für diesen Befehl an:
Datei in ein neues Verzeichnis kopieren
Beachten Sie, dass beim Kopieren einer Datei mit dem Kopieren() Funktion, Berechtigungen für die Datei werden auch geklont aber Metadaten der Datei werden nicht kopiert. Das bedeutet, wenn Sie überprüfen, wann diese Datei erstellt wurde, wird die neue Zeit angezeigt, als Sie dieses Skript ausgeführt haben.
Datei mit Metadaten kopieren
Im letzten Abschnitt haben wir gesehen, wie wir eine Kopie der Datei erstellen können. Was ist, wenn Sie einen genauen Klon einer Datei erstellen möchten, bei dem auch die Metadaten geklont werden, z. B. wann die Datei erstellt wurde usw.?. Das ist auch möglich, aber das funktioniert möglicherweise nicht auf einem POSIX-basierten System. Schauen wir uns ein Beispiel an, wie dies geschehen kann:
Importieren von OSShutil importieren
Importzeit
new_directory = 'LinuxHint'
src_file = './Dateien/hallo.TXT'
Zieldatei = './LinuxHinweis/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('Zugriff:', Zeit.ctime(stat_info.st_atime))
print(' Geändert:', Zeit.ctime(stat_info.st_mtime))
os.mkdir(neues_verzeichnis)
print('Metadaten für Quelldatei:')
file_metadata(src_file)
Shutil.copy2(src_file, neues_verzeichnis)
print('Metadaten für Zieldatei:')
file_metadata(dest_file)
Folgendes erhalten wir mit diesem Befehl zurück, wenn wir dies auf einem POSIX-basierten System ausführen (Metadaten werden nicht vollständig geklont):
Datei mit Metadaten kopieren
Auf nicht-POSIX-basierten Systemen hätte sogar die Erstellungs- und Zugriffszeit exakt gepasst.
Komplettes Verzeichnis klonen
Im letzten Abschnitt haben wir gesehen, wie wir eine Kopie der Datei erstellen können. Hier sehen wir, wie wir ein komplettes Verzeichnis rekursiv klonen können. Dies bedeutet, dass, wenn in dem Verzeichnis, das wir klonen möchten, ein anderes Verzeichnis existiert, auch dieses geklont wird.
pprint importierenShutil importieren
Importieren von OS
src_verzeichnis = './Dateien'
Zielverzeichnis = './LinuxHinweis'
Shutil.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:
Duplizieren eines Verzeichnisses
Beachten Sie, dass das Verzeichnis, das wir an die Funktion copytree() übergeben, als Zielverzeichnis darf nicht existieren, bevor wir dieses Programm ausführen.
Löschen eines Verzeichnisses
Das Löschen eines Verzeichnisses ist sehr einfach mit dem rmbaum() Funktion im Modul. Sehen wir uns diese Funktion hier in Aktion an:
pprint importierenShutil importieren
Importieren von OS
delete_directory = 'LinuxHint'
aktuelles_verzeichnis = '.'
print('Inhalt vor dem Entfernen:')
pprint.pprint(os.listdir(aktuelles_verzeichnis))
Shutil.rmtree(delete_directory)
print('Inhalt nach Entfernung:')
pprint.pprint(os.listdir(aktuelles_verzeichnis))
Nach dem Ausführen des Skripts, LinuxHinweis Verzeichnis wird zusammen mit dem Inhalt gelöscht. Folgendes erhalten wir mit diesem Befehl zurück:
Verzeichnis löschen
Dateien suchen
Wenn Sie eine Datei finden möchten, die in der PATH-Variablen auf Ihrem Computer vorhanden ist, können wir die welche() Funktion, um diese Datei anhand des Namens zu finden. Schauen wir uns ein Demonstrationsbeispiel für diese Funktion an:
Shutil importierendrucken (shutil.which('bsondump'))
drucken (shutil.which('no-file-found'))
Folgendes erhalten wir mit diesem Befehl zurück:
Datei auf PATH finden
Überwachen des Dateisystemspeicherplatzes
Mit dem Shutil-Modul haben wir eine Funktion disk_usage(), über die wir auch Speicherplatzinformationen über unseren Computer erhalten können. Schauen wir uns ein Beispiel an, das diese Daten für Menschen lesbar zeigt:
Shutil importierentotal_b, used_b, free_b = Shutil.Festplattennutzung('.')
GB = 10 ** 9 # GB == Gigabyte
print('Gesamt: :6.2f GB'.format(gesamt_b/gb))
print('Gebraucht: :6.2f GB'.format(used_b / gb))
print('Kostenlos: :6.2f GB'.format(free_b / gb))
Folgendes erhalten wir mit diesem Befehl zurück:
Dateisystemspeicherplatz 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:
Shutil importierenImportieren von OS
Archivverzeichnis = \
os.Pfad.expanduser(os.Pfad.join('Zielverzeichnis-Pfad', 'Linuxhint'))
root_dir = os.Pfad.expanduser(os.Pfad.beitreten('~', '.sch'))
Shutil.make_archive(archive_directory, 'gztar', root_dir)
Folgendes erhalten wir mit diesem Befehl zurück:
Archivierungsverzeichnis
Wenn Sie die TAR-Datei entpacken und nachsehen, enthält sie alle .ssh Verzeichnisdateien darin.
Fazit
In dieser Lektion haben wir uns angeschaut, wie wir Dateiobjekte mit High-Level-Dateioperationen einfach mit verwalten können Shutil Modul in Python. Vorgänge wie das Kopieren des Inhalts einer Datei, Erstellen einer neuen Kopie einer Datei usw. sah einfach aus mit diesem Modul.