Copia esercizio Python speciale

L'esercizio Copia speciale va con il materiale relativo al file system e ai comandi esterni nella sezione Utilità Python. Questo esercizio si trova nella directory "copyspecial" all'interno di google-python-exercises (scarica google-python-exercises.zip per maggiori dettagli, vedi Configurazione). Aggiungi il codice in copyspecial.py.

Il programma copyspecial.py utilizza una o più directory come argomenti. Supponiamo che un file "speciale" sia un file in cui il nome contiene il pattern __w__ da qualche parte, dove la w corrisponde a uno o più caratteri della parola. Il metodo main() fornito include codice per analizzare gli argomenti della riga di comando, ma il resto spetta a te. Scrivi funzioni per implementare le funzionalità riportate di seguito e modifica main() per chiamare le tue funzioni.

Funzioni suggerite per la tua soluzione(dettagli di seguito):

  • get_special_paths(dir). Restituisce un elenco dei percorsi assoluti dei file speciali nella directory specificata.
  • copia_to(percorsi, dir) dato un elenco di percorsi, copia quei file nella directory specificata
  • zip_to(percorsi, zippath) in un elenco di percorsi, comprimere i file nel file ZIP specificato

Parte A (modifica dei percorsi dei file)

Raccogli un elenco di percorsi assoluti dei file speciali in tutte le directory. Nel caso più semplice, è sufficiente stampare l'elenco (qui il punto "." dopo il comando è un singolo argomento che indica la directory corrente). Stampa un percorso assoluto per riga.

$ ./copyspecial.py .
/Users/nparlante/pycourse/day2/xyz__hello__.txt
/Users/nparlante/pycourse/day2/zz__something__.jpg

Supponiamo che i nomi non vengano ripetuti nelle directory (facoltativo: verifica questa ipotesi e verifica l'errore se è stata violata).

Parte B (copia di file)

Se l'opzione "--todir dir" è presente all'inizio della riga di comando, non stampare nulla e copia invece i file nella directory specificata, creandola se necessario. Utilizza il modulo Python "shutil" per copiare i file.

$ ./copyspecial.py --todir /tmp/fooby .
$ ls /tmp/fooby
xyz__hello__.txt        zz__something__.jpg

Parte C (chiamata a un programma esterno)

Se all'inizio della riga di comando è presente l'opzione "--tozip zipfile", esegui questo comando: "zip -j zipfile <elenca tutti i file>". In questo modo verrà creato un file ZIP contenente i file. Solo per divertimento/rassicurazioni, stampa anche la riga di comando che eseguirai per prima (come mostrato nella lezione). (Nota per Windows: Windows non include un programma per produrre archivi .zip standard per impostazione predefinita, ma puoi scaricare il programma zip senza costi e aperto dal sito www.info-zip.org). Per gli utenti Linux, se zip non è installato, è possibile installarlo chiamando sudo apt install zip .

$ ./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

Se il processo secondario si chiude con un codice di errore, esci con un codice di errore e stampa l'output del comando. Per verificarlo, prova a scrivere un file ZIP in una directory inesistente.

$ ./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)