Die Übung zum Kopieren von Spezialinhalten gehört zum Dateisystem und zu externen Befehlen im Abschnitt Python-Dienstprogramme. Diese Übung ist Teil des „Copyspecials“ im Verzeichnis „google-python-exercises“. Laden Sie google-python-exercises.zip herunter, falls Sie dies noch nicht getan haben. Weitere Informationen finden Sie unter Einrichten. Fügen Sie Ihren Code in copyspecial.py ein.
Das Programm „copyspecial.py“ verwendet ein oder mehrere Verzeichnisse als Argumente. Wir sagen, dass ein „besonders -Datei ist eine Datei, in der der Name irgendwo das Muster __w__ enthält, wobei das w aus einem oder mehreren Wortzeichen besteht. Die bereitgestellte "main()" enthält Code zum Parsen der Befehlszeilenargumente, für den Rest sind Sie selbst verantwortlich. Schreiben Sie Funktionen, um die unten aufgeführten Funktionen zu implementieren, und ändern Sie die Funktion "main()", um Ihre Funktionen aufzurufen.
Vorgeschlagene 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) anhand einer Liste von Pfaden und kopiert diese Dateien in das angegebene Verzeichnis
- zip_to(paths, zippath) anhand einer Liste von Pfaden, komprimieren Sie diese Dateien in die angegebene Zipfile-Datei.
Teil A (Dateipfade bearbeiten)
Erstellen Sie eine Liste der absoluten Pfade der speziellen Dateien in allen Verzeichnissen. Im einfachsten Fall geben Sie einfach diese Liste aus (hier ist das „.“ 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
Es wird davon ausgegangen, dass Namen nicht in den Verzeichnissen wiederholt werden (optional: Überprüfen Sie diese Annahme und geben Sie bei einem Verstoß einen Fehler aus).
Teil B (Kopieren von Dateien)
Wenn das Verzeichnis „--todir dir“ am Anfang der Befehlszeile vorhanden ist, geben Sie nichts aus. Kopieren Sie stattdessen die Dateien in das angegebene Verzeichnis und erstellen Sie es gegebenenfalls. Python-Modul „shutil“ verwenden zum Kopieren von Dateien.
$ ./copyspecial.py --todir /tmp/fooby . $ ls /tmp/fooby xyz__hello__.txt zz__something__.jpg
Teil C (Aufruf eines externen Programms)
Wenn die Datei "--tozip zipfile" am Anfang der Befehlszeile befindet, führen Sie den folgenden Befehl aus: "zip -j zipfile <alle Dateien auflisten>". Dadurch wird eine ZIP-Datei mit den Dateien erstellt. Drucken Sie zur Verdeutlichung auch die Befehlszeile aus, die Sie zuerst erstellen werden (wie in der Vorlesung gezeigt). (Hinweis für Windows-Nutzer: In Windows ist kein Programm zum Erstellen von Standard-ZIP-Archiven enthalten, Sie können aber das kostenlose ZIP-Programm unter www.info-zip.org herunterladen.)
Als Linux-Nutzer gilt: Wenn zip
nicht installiert ist, gilt Folgendes:
kann es durch Aufrufen von sudo apt install zip
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
Wenn der untergeordnete Prozess mit einem Fehlercode beendet wird, beenden Sie den Vorgang mit einem Fehlercode und geben Sie die Ausgabe des Befehls aus. Testen Sie dies, 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)