Topic: Orientarsi nelle cartelle  (Letto 34 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline aflode

  • python unicellularis
  • *
  • Post: 1
  • Punti reputazione: 0
    • Mostra profilo
Orientarsi nelle cartelle
« il: Agosto 12, 2019, 10:40 »
Salve, sono nuovo di python e, in generale, abbastanza nuovo al mondo della programmazione. Di conseguenza sto riscontrando problemi anche con problemi (credo) abbastanza semplici come il seguente:
Nella mia cartella di lavoro ci sono una serie di sottocartelle, ma solo alcune di queste contengono le immagini che dovrei aprire. In particolare, i nomi delle sottocartelle che desidero aprire sono stipati in un file txt, separate da virgola.

La mia idea era quella di creare una lista contente come stringhe i nomi di queste sottocartelle, e poi, in qualche modo, far sì che venissero estratte le immagini solo dalle sottocartelle i cui nomi erano presenti in questa lista.
La prima parte credo di averla risolta scrivendo
def reader(path):
    with open(path, 'r') as f:
        names = f.read()
        names = names.split(',')
    return names

Ora però non riesco a completare la seconda parte. So che il modulo a cui fare riferimento è os. In particolare mi era sembrato pertinente il comando os.path.basename

Offline nuzzopippo

  • python habilis
  • **
  • Post: 56
  • Punti reputazione: 0
    • Mostra profilo
Re:Orientarsi nelle cartelle
« Risposta #1 il: Agosto 15, 2019, 09:33 »
Ciao, ho letto ieri questo post ma non avevo tempo per rispondere, è facile Tu abbia già risolto, dato il tempo trascorso, comunque ...

Molto dipende da cosa tu voglia fare e come intendi operare con le immagini contenute nelle sotto-cartelle della directory contenente la Tua applicazione, mettiamo tu voglia solo stampare i file presenti nelle cartelle delle tipologie che Tu intendi gestire (non tutti i tipi sono facilmente gestibili con python), potresti rilevarli tramite le "estensioni" dei nomi dei files e ciclare tra i nomi, sotto una simulazione in merito:
>>> import os
>>> names = ['risorse', 'risorse/icone']
>>> ext = ['png', 'jpg']
>>> for n in names:
print('esame directory', n)
files = os.listdir(n)
if files:
for f in files:
if f.split('.')[-1] in ext:
print(' - ', f)
else:
print(' - ')
print()


esame directory risorse
 -  04.jpg
 -  06.jpg
 -  07.jpg
 -  08.jpg
 -  09.jpg
 -  10.jpg
 -  12.jpg
 -  05.jpg
 -  03.png
 -  01.jpg
 -  02.jpg
 -  b11.jpg

esame directory risorse/icone
 -  format-text-bold.png
 -  format-text-italic.png
 -  format-text-strikethrough.png
 -  format-text-underline.png

>>>

Come puoi vedere, mi sono limitato a definire un paio di possibili estensioni nella lista ext e stampare a video i soli files che presentino nel nome una estensione compatibile.

Il metodo sopra funzionerebbe solo se si lanci un eventuale script posizionati nella direttrice che lo contiene, lanciandolo da directory diversa si avrebbe errore nel rilevare i files. Per ovviare alla faccenda puoi importare il modulo "sys" (oltre os) e sfruttare gli argomenti di lancio dello script per ricavarti la direttrice contenente lo script ed utilizzarla per le tue interrogazioni, in questo modo:
>>> import sys
>>> os.path.abspath(os.path.dirname(sys.argv[0]))
'/media/nuzzo/progetti/fotodiario'
>>> cp = os.path.abspath(os.path.dirname(sys.argv[0]))
>>> for n in names:
print('esame directory', n)
files = os.listdir(os.path.join(cp, n))
...


Tieni ben presente il metodo "os.path.join(...)", ti sarà utile nel caso Tu voglia "operare" sui file rilevati.

Ovviamente, ci sono molti altri modi con cui approcciarsi, magari più efficaci e magari più complessi ma tutto dipende da cosa vuoi fare e come.

Ciao :)