Spezielle Python-Übung kopieren

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)