PDA

Visualizza la versione completa : [PYTHON] Esercizio su manipolazione file di testo, liste e dizionari


DrizztITA
10-01-2018, 14:02
Salve a tutti,
sono un neofita ovviamente.
Ho trovato questo esercizio su un testo che sto studiando,qualcuno mi aiuta a risolverlo?

"Script che indicizza tutti i file di una specifica direcotry fornita da utente.
Deve costruire un dizionario in cui le chiavi sono tutte le parole univoche di tutti i file
(descritte dall’espressione regolare r"w+" , trattando le parole senza distinguere fra lettere maiuscole e minuscole),
e il valore di ogni voce e' una lista di nomi di file che contengono tale parola.

Per esempio,se la parola aloha è menzionata nei file early-internet.dat e hawaiian-travel.txt,
il dizionario dovrà contenere la voce:
{..., 'aloha': ['early-internet.dat', 'hawaiian-travel.txt'],...}."

Non so bene come collegare la lista di parole univoche con le chiavi del dizionario ed associare la lista dei files a cui appartengono.
Per ora ho fatto questo:

for root, dirs, files in os.walk(path):

for name in files:

# Apro file
file = open(os.path.join(path,name))

# Divido il file in una lista di parole
wordss = re.findall(r"\w+",file.read())

# Elimino dalla lista di parole i duplicati
wordss = list(set(wordss))

# Ottengo un dizionario dalla lista parole non duplicare del file
diz = dict(enumerate(wordss))

# Creo un dizionario con le keys che corrispondono ai values di diz e con values nome file usato
for v in diz.values():
d[v (http://www.python.it/wiki/edit/v/)]=name

Adesso ho n dizionari comporti da chiave=parola_univoca valore=nome_file.

Come faccio ad unire questi N dizionari in un unico dizionario strutturato come spiegato?

Cioè con chiave = parola_univoca valore = lista_file_di_appartenenza ?

clasku
10-01-2018, 18:08
dopo che hai la lista di parole univoche per ogni file, scorrila, aggiungi ogni elemento della lista come chiave e come valore setta di default una lista che conterrà i nomi dei file che andrai ad "appendere"

la cosa a cui devi prestare attenzione è gestire la presenza o meno dell'elemento nel dizionario (e se leggi bene, ti ho dato uno spunto per il metodo da usare nella frase precedente)...

e ricordati di rendere tutte le chiavi minuscole o maiuscole (cosa che non mi pare tu faccia al momento)

DrizztITA
10-01-2018, 23:23
Ciao,
grazie per il suggerimento.
Ho risolto cosi:

finaldict=dict()
for w in words:
if w not in finaldict:
finaldict[w]=list([name])
else:
finaldict[w].append(name)

clasku
11-01-2018, 06:48
Guarda il metodo setdefault di dict, puoi evitare il codice che hai scritto (default sarà una lista e dopo la chiamata al metodo append il valore)
Una linea di codice invece di 4

Loading