[argparse]come utilizzarlo?

di il
7 risposte

[argparse]come utilizzarlo?

Ciao a tutti, dovrei scrivere un codice che prende in ingresso uno o più path contentente dei file da elaborare.
io so farlo procedendo per un path alla volta con questo semplice main
       
if __name__ == "__main__":
    main(sys.argv[1])
come posso modificarlo? come si utilizza la funzione argparse se è quella quella giusta da usare?

7 Risposte

  • Re: [argparse]come utilizzarlo?

    Argparse non ti serve. Per leggere tutta la argv scartando la prima voce (che è il nome dello script):
    
    def myapp(nomefile):
    	.....
    	return 0
    	
    if __name__ == "__main__":
    	j = 0
    	for i in sys.argv:
    		if j > 0:
    			myapp(i)
    		j += 1
    Oppure fai un while:
    if __name__ == "__main__":
    	j = 1
    	while j < len(sys.argv):
            	myapp(sys.argv[j])
            	j += 1
  • Re: [argparse]come utilizzarlo?

    Grazie per la risposta. Funziona.
    Ora però ho riscontrato un altro problema. utilizzando il codice che mi ha scritto, si processa tutte le cartelle inserite da terminale, ma le "vede" sempre come un solo ingresso singolo la funzione che le prende in ingresso...come posso fare in modo che la funzione myapp veda i file contenuti in piu cartelle come in un'unica? cioè come fossero messi in un'unica grande fold?
  • Re: [argparse]come utilizzarlo?

    lucry23 ha scritto:


    Grazie per la risposta. Funziona.
    Ora però ho riscontrato un altro problema. utilizzando il codice che mi ha scritto, si processa tutte le cartelle inserite da terminale, ma le "vede" sempre come un solo ingresso singolo la funzione che le prende in ingresso...come posso fare in modo che la funzione myapp veda i file contenuti in piu cartelle come in un'unica? cioè come fossero messi in un'unica grande fold?
    Se le specifiche richieste erano quelle, allora l'implementazione che ti ho dato non è valida.
    Devi usare glob. Glob ritorna una lista (anche vuota) di file che corrispondono al pattern passato alla funzione.
    import sys
    import glob
    
    def myapp(listafiles):
    	......
    	return 0
    	
    j = 1
    lista_f = list()
    
    while j < len(sys.argv):
            lista_f.extend(glob.glob(sys.argv[j]))
            j += 1
    myapp(lista_f)
    Non viene fatta espansione del '~', e devi esplicitamente aggiungere un '*' od un altro filtro al fondo del nome della directory:
    $ list_myfile.py ../dir1/* ../dir2/*.py dir3/testo??.txt
  • Re: [argparse]come utilizzarlo?

    Ciao scusami, ma purtroppo non funziona...
    da terminale io faccio:
    
    > py my_function.py C:\Users\Fold1  C:\Users\Fold2 C:\Users\Fold3
    
    sbaglio?
  • Re: [argparse]come utilizzarlo?

    lucry23 ha scritto:


    Ciao scusami, ma purtroppo non funziona...
    da terminale io faccio:
    
    > py my_function.py C:\Users\Fold1  C:\Users\Fold2 C:\Users\Fold3
    
    sbaglio?
    
    > py my_function.py C:\Users\Fold1\*  C:\Users\Fold2\* C:\Users\Fold3\*
    
  • Re: [argparse]come utilizzarlo?

    Ciao, ho provato come mi hai consigliato, ma ciò che ottengo è una lista dei percorsi, dei singoli file contenuti nelle tre fold inserite in ingresso.
    Quindi la mia funzione non riconosce come path ma come lista.
    come posso mediare?
  • Re: [argparse]come utilizzarlo?

    lucry23 ha scritto:


    Ciao, ho provato come mi hai consigliato, ma ciò che ottengo è una lista dei percorsi, dei singoli file contenuti nelle tre fold inserite in ingresso.
    Quello fa la funzione glob: prende un path in input e ti torna una lista dei file che contiene.
    Quindi la mia funzione non riconosce come path ma come lista.
    come posso mediare?
    Continuo a non capire dove vuoi arrivare: hai n directory, ottieni l'elenco dei file in esse contenuti, poi ci fai quello che ti pare: se il path non ti serve, lo strippi. Se vuoi un path diverso (perché poi?) lo sostituisci. Prendi ogni elemento ritornato nella lista, lo tiri fuori dalla lista stessa e ci fai quello che ti pare, non capisco quale sia il problema: un po' di elaborazione ci vuole comunque. La tua funzione vuole un path (qualunque cosa significhi ciò)? Prima di passarglielo prendi la lista e la trasformi in un path (qualunque cosa tu intenda per 'path'). Non ti va bene la lista? Trasformala in 'altro'.
Devi accedere o registrarti per scrivere nel forum
7 risposte