Bild vom Autor
Pythons eingebaute Pathlib-Modul macht das Arbeiten mit Dateisystempfaden tremendous einfach. In So navigieren Sie mit Pythons Pathlib durch das Dateisystemhaben wir uns die Grundlagen der Arbeit mit Pfadobjekten und der Navigation im Dateisystem angesehen. Jetzt ist es an der Zeit, noch weiter zu gehen.
In diesem Tutorial gehen wir drei spezifische Dateiverwaltungsaufgaben durch, bei denen die Funktionen des Pathlib-Moduls zum Einsatz kommen:
- Dateien nach Erweiterung organisieren
- Suchen nach bestimmten Dateien
- Sichern wichtiger Dateien
Am Ende dieses Tutorials haben Sie gelernt, wie Sie pathlib für Dateiverwaltungsaufgaben verwenden. Legen wir los!
1. Dateien nach Erweiterung organisieren
Wenn Sie für ein Projekt recherchieren und daran arbeiten, erstellen Sie häufig Advert-hoc-Dateien und laden zugehörige Dokumente in Ihr Arbeitsverzeichnis herunter, bis alles unübersichtlich ist und Sie es organisieren müssen.
Nehmen wir ein einfaches Beispiel, bei dem das Projektverzeichnis necessities.txt, Konfigurationsdateien und Python-Skripte enthält. Wir möchten die Dateien in Unterverzeichnisse sortieren – eines für jede Erweiterung. Der Einfachheit halber wählen wir die Erweiterungen als Namen der Unterverzeichnisse.
Dateien nach Erweiterung organisieren | Bild vom Autor
Hier ist ein Python-Skript, das ein Verzeichnis durchsucht, Dateien anhand ihrer Erweiterungen identifiziert und sie in die entsprechenden Unterverzeichnisse verschiebt:
# manage.py
from pathlib import Path
def organize_files_by_extension(path_to_dir):
path = Path(path_to_dir).expanduser().resolve()
print(f"Resolved path: {path}")
if path.exists() and path.is_dir():
print(f"The listing {path} exists. Continuing with file group...")
for merchandise in path.iterdir():
print(f"Discovered merchandise: {merchandise}")
if merchandise.is_file():
extension = merchandise.suffix.decrease()
target_dir = path / extension(1:) # Take away the main dot
# Make sure the goal listing exists
target_dir.mkdir(exist_ok=True)
new_path = target_dir / merchandise.title
# Transfer the file
merchandise.rename(new_path)
# Verify if the file has been moved
if new_path.exists():
print(f"Efficiently moved {merchandise} to {new_path}")
else:
print(f"Failed to maneuver {merchandise} to {new_path}")
else:
print(f"Error: {path} doesn't exist or shouldn't be a listing.")
organize_files_by_extension('new_project')
Der organize_files_by_extension()
Die Funktion verwendet einen Verzeichnispfad als Eingabe, löst ihn in einen absoluten Pfad auf und organisiert die Dateien in diesem Verzeichnis nach ihren Dateierweiterungen. Sie stellt zunächst sicher, dass der angegebene Pfad existiert und ein Verzeichnis ist.
Anschließend durchläuft es alle Elemente im Verzeichnis. Für jede Datei ruft es die Dateierweiterung ab, erstellt ein neues Verzeichnis mit dem Namen der Erweiterung (sofern es noch nicht existiert) und verschiebt die Datei in dieses neue Verzeichnis.
Nach dem Verschieben jeder Datei wird der Erfolg des Vorgangs bestätigt, indem die Existenz der Datei am neuen Speicherort überprüft wird. Wenn der angegebene Pfad nicht existiert oder kein Verzeichnis ist, wird eine Fehlermeldung ausgegeben.
Hier ist die Ausgabe für den Beispielfunktionsaufruf (Organisieren von Dateien im Verzeichnis new_project):
Versuchen Sie dies nun in einem Projektverzeichnis in Ihrer Arbeitsumgebung. Ich habe if-else verwendet, um Fehler zu berücksichtigen. Sie können aber auch try-except-Blöcke verwenden, um diese Model zu verbessern.
2. Suche nach bestimmten Dateien
Manchmal möchten Sie die Dateien vielleicht nicht wie im vorherigen Beispiel nach ihrer Erweiterung in verschiedene Unterverzeichnisse organisieren. Aber vielleicht möchten Sie nur alle Dateien mit einer bestimmten Erweiterung finden (wie alle Bilddateien), und dafür können Sie Globbing verwenden.
Angenommen, wir möchten die Datei necessities.txt finden, um die Abhängigkeiten des Projekts anzuzeigen. Lassen Sie uns dasselbe Beispiel verwenden, die Dateien jedoch nach der Erweiterung in Unterverzeichnisse gruppieren.
Wenn Sie die glob()
-Methode auf dem Pfadobjekt wie gezeigt, um alle Textdateien (definiert durch das Muster „*.txt“) zu finden, werden Sie sehen, dass die Textdatei nicht gefunden wird:
# search.py
from pathlib import Path
def search_and_process_text_files(listing):
path = Path(listing)
path = path.resolve()
for text_file in path.glob('*.txt'):
# course of textual content information as wanted
print(f'Processing {text_file}...')
print(text_file.read_text())
search_and_process_text_files('new_project')
Das ist weil glob()
durchsucht nur das aktuelle Verzeichnis, in dem sich die Datei necessities.txt nicht befindet. Die Datei necessities.txt befindet sich im Unterverzeichnis txt. Sie müssen additionally rekursives Globbing mit dem rglob()
Methode stattdessen.
Hier ist der Code zum Suchen der Textdateien und Ausdrucken ihres Inhalts:
from pathlib import Path
def search_and_process_text_files(listing):
path = Path(listing)
path = path.resolve()
for text_file in path.rglob('*.txt'):
# course of textual content information as wanted
print(f'Processing {text_file}...')
print(text_file.read_text())
search_and_process_text_files('new_project')
Der search_and_process_text_files
Funktion nimmt einen Verzeichnispfad als Eingabe, löst ihn in einen absoluten Pfad auf und sucht nach allen .txt
Dateien in diesem Verzeichnis Und seine Unterverzeichnisse mit dem rglob()
Methode.
Für jede gefundene Textdatei wird der Dateipfad gedruckt und anschließend der Inhalt der Datei gelesen und gedruckt. Diese Funktion ist nützlich, um alle Textdateien in einem angegebenen Verzeichnis rekursiv zu finden und zu verarbeiten.
Da necessities.txt die einzige Textdatei in unserem Beispiel ist, erhalten wir folgende Ausgabe:
Output >>>
Processing /dwelling/balapriya/new_project/txt/necessities.txt...
psycopg2==2.9.0
scikit-learn==1.5.0
Nachdem Sie nun wissen, wie Sie Globbing und rekursives Globbing verwenden, versuchen Sie, die erste Aufgabe (das Organisieren von Dateien nach Erweiterung) zu wiederholen, indem Sie Globbing verwenden, um die Dateien zu suchen und zu gruppieren und sie dann in das Zielunterverzeichnis zu verschieben.
3. Sichern Sie wichtige Dateien
Das Organisieren von Dateien nach der Erweiterung und das Suchen nach bestimmten Dateien sind die Beispiele, die wir bisher gesehen haben. Aber wie wäre es mit dem Sichern bestimmter wichtiger Dateien? Warum auch nicht?
Hier möchten wir Dateien aus dem Projektverzeichnis in ein Backup-Verzeichnis kopieren, anstatt die Datei an einen anderen Ort zu verschieben. Zusätzlich zu pathlib verwenden wir auch die shutil Kopierfunktion des Moduls.
Erstellen wir eine Funktion, die alle Dateien mit einer bestimmten Erweiterung (alle .py-Dateien) in ein Sicherungsverzeichnis kopiert:
#back_up.py
import shutil
from pathlib import Path
def back_up_files(listing, backup_directory):
path = Path(listing)
backup_path = Path(backup_directory)
backup_path.mkdir(mother and father=True, exist_ok=True)
for important_file in path.rglob('*.py'):
shutil.copy(important_file, backup_path / important_file.title)
print(f'Backed up {important_file} to {backup_path}')
back_up_files('new_project', 'backup')
Der back_up_files()
übernimmt einen vorhandenen Verzeichnispfad und eine Sicherungsverzeichnispfadfunktion und sichert alle Python-Dateien aus einem angegebenen Verzeichnis und seinen Unterverzeichnissen in einem angegebenen Sicherungsverzeichnis.
Es erstellt Pfadobjekte sowohl für das Quellverzeichnis als auch für das Sicherungsverzeichnis und stellt sicher, dass das Sicherungsverzeichnis vorhanden ist, indem es dieses und alle erforderlichen übergeordneten Verzeichnisse erstellt, sofern diese noch nicht vorhanden sind.
Die Funktion durchläuft dann alle .py
Dateien im Quellverzeichnis mit dem rglob()
Methode. Für jede gefundene Python-Datei wird die Datei unter Beibehaltung des ursprünglichen Dateinamens in das Sicherungsverzeichnis kopiert. Im Wesentlichen hilft diese Funktion dabei, eine Sicherungskopie aller Python-Dateien in einem Projektverzeichnis zu erstellen.
Nachdem Sie das Skript ausgeführt und die Ausgabe überprüft haben, können Sie jederzeit den Inhalt des Sicherungsverzeichnisses prüfen:
Für Ihr Beispielverzeichnis können Sie verwenden back_up_files('/path/to/listing', '/path/to/backup/listing')
um interessante Dateien zu sichern.
Einpacken
In diesem Tutorial haben wir praktische Beispiele für die Verwendung des Python-Moduls pathlib untersucht, um Dateien nach Erweiterung zu organisieren, nach bestimmten Dateien zu suchen und wichtige Dateien zu sichern. Den gesamten in diesem Tutorial verwendeten Code finden Sie auf GitHub.
Wie Sie sehen, macht das Modul pathlib die Arbeit mit Dateipfaden und Dateiverwaltungsaufgaben einfacher und effizienter. Wenden Sie diese Konzepte jetzt in Ihren eigenen Projekten an, um Ihre Dateiverwaltungsaufgaben besser zu bewältigen. Viel Spaß beim Programmieren!
Bala Priya C ist Entwicklerin und technische Redakteurin aus Indien. Sie arbeitet gerne an der Schnittstelle zwischen Mathematik, Programmierung, Datenwissenschaft und Inhaltserstellung. Ihre Interessens- und Fachgebiete umfassen DevOps, Datenwissenschaft und natürliche Sprachverarbeitung. Sie liest, schreibt, programmiert und trinkt gerne Kaffee! Derzeit arbeitet sie daran, ihr Wissen zu lernen und mit der Entwickler-Neighborhood zu teilen, indem sie Tutorials, Anleitungen, Meinungsbeiträge und mehr verfasst. Bala erstellt auch ansprechende Ressourcenübersichten und Programmier-Tutorials.