Die Übung „Copy Special“ bezieht sich auf das Material zum Dateisystem und zu externen Befehlen im Abschnitt Python-Dienstprogramme. Diese Übung befindet sich im Verzeichnis „copyspecial“ innerhalb von google-python-exercises. Laden Sie google-python-exercises.zip herunter, falls noch nicht geschehen. Weitere Informationen finden Sie unter Einrichten. Fügen Sie Ihren Code in copyspecial.py hinzu.
Das Programm „copyspecial.py“ verwendet ein oder mehrere Verzeichnisse als Argumente. Nehmen wir an, dass eine "special"-Datei irgendwo im Namen das Muster __w__ enthält, wobei das w für ein oder mehrere Wortzeichen steht. Die angegebene „main()“ enthält Code zum Parsen der Befehlszeilenargumente, aber der Rest bleibt Ihnen überlassen. Schreiben Sie Funktionen, um die folgenden Funktionen zu implementieren, und ändern Sie main(), um Ihre Funktionen aufzurufen.
Empfohlene Funktionen für Ihre Lösung(Details siehe unten):
- get_special_paths(dir) -- gibt eine Liste der absoluten Pfade der speziellen Dateien im angegebenen Verzeichnis zurück.
- copy_to(paths, dir) ausgehend von einer Pfadliste, kopiert diese Dateien in das angegebene Verzeichnis
- zip_to(paths, zippath) mit einer Pfadliste, diese Dateien in die entsprechende ZIP-Datei komprimieren
Teil A (Bearbeiten von Dateipfaden)
Stellen Sie eine Liste der absoluten Pfade der speziellen Dateien in allen Verzeichnissen zusammen. Im einfachsten Fall geben Sie einfach diese Liste aus (hier ist „.“ nach dem Befehl ein einzelnes Argument, das das aktuelle Verzeichnis angibt). Geben Sie einen absoluten Pfad pro Zeile aus.
$ ./copyspecial.py . /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
Wir gehen davon aus, dass sich Namen in den Verzeichnissen nicht wiederholen (optional: Überprüfen Sie diese Annahme und führen Sie einen Fehler aus, wenn gegen sie verstoßen wird).
Teil B (Kopieren von Dateien)
Wenn die Option „--todir dir“ am Anfang der Befehlszeile vorhanden ist, geben Sie nichts aus, sondern kopieren Sie die Dateien in das angegebene Verzeichnis und erstellen Sie dieses bei Bedarf. Verwenden Sie zum Kopieren von Dateien das Python-Modul „shutil“.
$ ./copyspecial.py --todir /tmp/fooby . $ ls /tmp/fooby xyz__hello__.txt zz__something__.jpg
Teil C (Aufruf eines externen Programms)
Wenn die Option „--tozip zipfile“ am Anfang der Befehlszeile vorhanden ist, führen Sie folgenden Befehl aus: „zip -j zipfile <Alle Dateien auflisten>“. Dadurch wird eine ZIP-Datei mit den Dateien erstellt. Drucken Sie zur Sicherheit auch die Befehlszeile aus, die Sie zuerst erledigen werden (wie in der Vorlesung gezeigt). Windows-Hinweis: Windows ist nicht standardmäßig mit einem Programm zum Erstellen von ZIP-Standardarchiven ausgestattet .Sie können das kostenlose und offene ZIP-Programm jedoch unter www.info-zip.org herunterladen.
Linux-Nutzer: Wenn zip
nicht installiert ist, rufen Sie sudo apt install zip
auf, um es zu installieren .
$ ./copyspecial.py --tozip tmp.zip .Command I'm going to do:zip -j tmp.zip /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
Wird der untergeordnete Prozess mit einem Fehlercode beendet, beenden Sie den Vorgang mit einem Fehlercode und geben Sie die Ausgabe des Befehls aus. Sie können dies testen, indem Sie versuchen, eine ZIP-Datei in ein nicht vorhandenes Verzeichnis zu schreiben.
$ ./copyspecial.py --tozip /no/way.zip .Command I'm going to do:zip -j /no/way.zip /Users/nparlante/pycourse/day2/xyz__hello__.txt /Users/nparlante/pycourse/day2/zz__something__.jpg
zip I/O error: No such file or directory zip error: Could not create output file (/no/way.zip)