Copia esercizio Python speciale

L'esercizio Copia speciale è abbinato al materiale del file system e dei comandi esterni nella sezione Programmi di utilità Python. Questo esercizio è nella sezione "copyspecial" all'interno di google-python-exercises (scarica google-python-exercises.zip se non lo hai già fatto; vedi Configurazione per i dettagli). Aggiungi il codice in copyspecial.py.

Il programma copyspecial.py prende una o più directory come argomenti. Diciamo che è un'offerta il nome contiene il pattern __w__ da qualche parte, dove w è costituito da uno o più caratteri della parola. La funzione main() fornita include il codice per analizzare gli argomenti della riga di comando, ma il resto spetta a te. Scrivi le funzioni per implementare le caratteristiche seguenti e modificare main() per chiamare le tue funzioni.

Funzioni suggerite per la soluzione(dettagli di seguito):

  • get_special_paths(dir) -- restituisce un elenco di percorsi assoluti dei file speciali nella directory specificata.
  • copy_to(paths, dir) dato un elenco di percorsi, copia i file nella directory specificata
  • zip_to(paths, zippath) con un elenco di percorsi, comprimi i file nel file ZIP specificato

Parte A (manipolazione dei percorsi dei file)

Raccogli un elenco dei 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

Partiamo dal presupposto che i nomi non vengano ripetuti tra le directory (facoltativo: verifica questo presupposto ed effettua un errore nel caso in cui sia stato violato).

Parte B (copia dei file)

Se il parametro "--todir dir" è presente all'inizio della riga di comando, non stampare nulla, ma copia i file nella directory specificata creandoli se necessario. Utilizzare il modulo Python "shutil" per la copia di file.

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

Parte C (chiamare un programma esterno)

Se il file ZIP "--tozip" all'inizio della riga di comando, esegui questo comando: "zip -j zipfile <list all the files>". Verrà creato un file ZIP contenente i file. Per divertimento/rassicurazione, stampa anche la riga di comando che eseguirai per prima (come mostrato nella lezione). Nota per Windows: per impostazione predefinita, Windows non include un programma per produrre archivi .zip standard, ma puoi scaricare il programma zip senza costi e aperto da www.info-zip.org. Per gli utenti Linux, se non ha installato zip, può 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 eseguire il test, prova a scrivere un file ZIP in una directory che non esiste.

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