venerdì 29 aprile 2011

Script ListDocSaver.py (facciamo un pò di ordine ... o quasi)


Ciao a tutti, sì sono stato maleducato nel post precedente a
non scusarmi...
Quindi chiedo scusa a tutti i lettori, per l'assenza prolungata dei mesi scorsi,
chiaramente causata da un periodo lavorativo molto impegnativo che di fatto mi ha portato via tempo e forze
per tener aggiornato il blog... bla bla bla..

Vorrei per farmi perdonare, un piccolo script che ho fatto per far pratica con Python che potrebbe interessare a qualcuno :) ..

Piccola premessa .... occorre una versione precedente alla 3.0...
Negli ultimi anni io, ma come tanti altri ho caricato il pc (vecchio e nuovo),  hard disk, pennette... cd e dvd di software, musica, video, documenti ecc...

Il problema è che a distanza di tempo ci si ritrova a porsi una domanda tipo :
cavolo mo' su quale Dvd ho salvato la canzone "Whole Lotta Love" dei Led Zeppelin?

GRRRR !!! Eh... appunto :

Trovare una canzone che non si ascolta da tempo, un video, un programma ecc...
su dvd/cd/HD ecc .. può diventare stressante...
Un pò di meno, se si elenchi per esempio, il contenuto di un Dvd masterizzato in precedenza su un file di testo.

Un semplicissimo file di testo dove, il più semplice Ctrl+F può diventare prezioso.

Per permettere allo script di accettare argomenti, si utilizza il modulo sys, opportunamente passato al metodo main (alla fine dello script):



Per rendere possibile la lettura degli argomenti  si deve importare il modulo getopt, con cui è appunto possibile stabilire il comportamento dello script in base al/ai parametri passati.

In questo script mi limito a gestire un solo parametro (-p e la sua versione estesa --path) e in alternativa i parametri -h (help) e -d (debug).

Senza dilungarmi troppo, provo a prendere i parametri, se qualcosa va storto mostro __doc__ (l'help), altrimenti passo al metodo popolaFileLog il valore del di -p
il risultato è il seguente :


Vengo infine al metodo popolaFileLog a cui appunto viene passato il percorso della directory (o dell'unità).
Piccola premessuccia, all'inizio dello script imposto la directory dove voglio salvare i file di testo creati, qui chiaramente ognuno dovrà impostare la directory scelta. ad esempio :
defaultPath='/home/nomeutente/Documenti/DVD-CD/'

Come lavora il metodo popolaFileLog..
Crea innanzitutto una lista in base al percorso passato... splittando il percorso con il carattere '/'
chiaramente a me interessa solamente il nome della directory e/o il nome dell'unità che per chi non lo sapesse su ubuntu solitamente viene mappata sotto /media/nomeUnita.

Poniamo ad esempio che ho passato allo script il percorso /media/mp3110428001 (dove mp3110428001 è l'etichetta assegnata al dvd/cd in fase di masterizzazione),
la lista ottenuta con il il metodo split sarà in questo caso
 ['', 'media', 'mp3110428001']
come detto mi interessa in questo caso mp3110428001, ma non sapendo (almeno quando si tratta di path di subdirectory) quanti elementi possa avere la lista ...
la inverto con il metoro reverse() che mi permetterà di avere il valore che mi interessa con lista[0] :


quindi compongo il path completo del file che andrò a creare che sarà così composto :


io ho usato la dicitura 'Contenuto'... ma ci si può mettere ciò che si vuole nel nostro caso il valore di pathFile sarà :

/home/nomeutente/Documenti/DVD-CD/Contenutomp3110428001.txt

a questo punto bisogna innanzitutto aprire il file in scrittura con

'w' sta per scrittura appunto :P

non ci rimane altro che sfogliare tutti i files, directory e subdirectory e scriverli nel file di testo ...
per memorizzare path, directory e files si utilizza il metodo walk del modulo os
e scorrere il tutto :

(nel mio caso ho lasciato anche subdirs per un eventuale uso ) chiaramente andando a capo ad ogni occorrenza trovata (con \n) ... chiaramente per ora non l'abbiamo nemmeno "toccato" il file... :)
per farlo bisogna "chiuderlo" con :
il metodo al completo sarà Richiamando quindi da riga di comando così : mi ritroverò nel file
/home/nomeutente/Documenti/DVD-CD/Contenutomp3110428001.txt dati tipo :
...
...
/media/MP3110428001/Led Zeppelin II/01 Whole Lotta Love.mp3
/media/MP3110428001/Led Zeppelin II/02 What is and What Should Never Be.mp3
/media/MP3110428001/Led Zeppelin II/03 The Lemon Song.mp3
/media/MP3110428001/Led Zeppelin II/04 Thank You.mp3
/media/MP3110428001/Led Zeppelin II/05 Heartbreaker.mp3
/media/MP3110428001/Led Zeppelin II/06 Living Loving Mad.mp3
/media/MP3110428001/Led Zeppelin II/07 Ramble On.mp3
/media/MP3110428001/Led Zeppelin II/08 Moby Dick.mp3
/media/MP3110428001/Led Zeppelin II/09 Bring It On Home.mp3
...
...
Cosicché la prossima volta potrò trovare, ad esempio la canzone che mi interessa più rapidamente...:)
per finire riporto il sorgente completo dello script ListDocSaver.py
Chiaramente, non nascondo che vorrei utilizzare questo script come base di partenza, magari per una classe di un futuro applicativo... magari pure con un qualche sorta di GUI grafica.. chissà! :D :D chiaramente attendo consigli e curiosità... che ho tanto da imparare :P

Nessun commento:

Posta un commento