Python

Shutil-Modul in Python

Shutil-Modul in Python
Dateiverwaltung und Handhabung von Dateiobjekten gelten in allen Programmiersprachen als eine der kniffligsten Aufgaben. Einige Programmiersprachen stellen uns einige Werkzeuge zur Verfügung, die die schwierigen Teile des Dateihandlings mit einfach zu bedienenden Funktionen und Schnittstellen abstrahieren. Genau das ist Pythons Shutil Modul tut es auch.

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 OS
Shutil 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 OS
Shutil 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 OS
Shutil 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 importieren
Shutil 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 importieren
Shutil 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 importieren
drucken (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 importieren
total_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 importieren
Importieren 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.

So erfassen und streamen Sie Ihre Gaming-Sitzung unter Linux
In der Vergangenheit galt das Spielen von Spielen nur als Hobby, aber mit der Zeit verzeichnete die Spieleindustrie ein enormes Wachstum in Bezug auf ...
Beste Spiele zum Spielen mit Handtracking
Oculus Quest hat kürzlich die großartige Idee des Hand-Trackings ohne Controller vorgestellt. Mit einer ständig steigenden Anzahl von Spielen und Akti...
So zeigen Sie OSD-Overlay in Vollbild-Linux-Apps und -Spielen an
Das Spielen von Spielen im Vollbildmodus oder die Verwendung von Apps im ablenkungsfreien Vollbildmodus kann Sie von relevanten Systeminformationen ab...