Forum >> Principianti >> analizzare file

Pagina: 1

Ciao a tutti,
sto creando una funzione che prende in ingresso un file e un elemento e stampa le righe del file dove e' contenuto l'elemento in questione piu' il numero delle volte trovato
il problema e' che non funziona con tutte le parole nel file, ad esempio di un qualsiasi file non stampa la prima parola della prima riga.
Questo e' il codice:

def ricerca_elemento(file,elem):

    lista=[]
    f=open(file,encoding="UTF-8")
    s=f.readlines()
   
    print(s)
    count=0
    for line in s:
        if elem in line:
            lista.append(line)
            count+=1
    print(lista)
    print(count)
probabilmente il codice si puo' scrivere meglio, pero' non capisco perche' alcune parole le rileva e altre no

grazie in anticipo
Senza avere il modo di provare il tuo script, sono su una piattaforma a me aliena, ad occhio mi sembra che non ci siano macroscopici errori. Considera però che la mia cena è stata impegnativa a livello alcolico e rivedere la grande bellezza in versione integrale per la seconda volta non sta aiutando il mio cervello in questo momento.

Vabbé torniamo a noi. Anche se ti consiglio di aprire il file in questo modo:
with open(il_tuo_file) as f:
   ...fai cose...
in modo da non preoccuparti della chiusura del file stesso, questo certo non inficia sulla lettura del file. Di default Python apre i file posizionando il cursore all'inizio del file e non certo saltando la prima parola.

A questo punto non essendo la lama, forse è il manico. Controlla con attenzione sia il file che tenti di aprire, al limite postalo/allegalo/invialo/scrivilo che l'elem che passi, perché il comportamento è quantomai curioso. Leggi qui per maggiori dettagli sull'apertura del file.

Aspetto tue notizie.
Cya
Ciao Daniele,

riposto innanzitutto il codice che ho modificato un po':

def ricerca_elemento(file,elem):
    lista=[]
    with open(file,encoding="UTF-8",errors="replace") as f:
        s=f.readlines()
        print(s)
        count=0
        for line in s:
            if elem.lower() in line:
                lista.append(line)
                count+=1
        print(lista)
        print(count)
finito=False
while not finito:
    richiesta=input("Digita il nome del file: ")
    elemento=input("Digita elemento da cercare: ")
    ricerca_elemento(richiesta,elemento)
    s1=input("----Finisco? ")
    finito=s1.lower()=="si"   
Allora ho creato di nuovo un file di testo e stavolta funziona, stampa la prima riga se la parola cercata è all'inizio. Il problema è che nel file che ho creato (frasi.txt) la prima parola della prima riga è minuscola, e quindi funziona.
quelle delle altri file invece iniziavano con la lettera maiuscola.
I problemi però sono due:
1) con un elem.lower() non risolvo il problema
2) nel file frasi.txt se cambio la prima parola da tutto minuscolo a prima lettera maiuscola, e scrivo il termine da ricercare esattamente uguale (es: Cane) non trova nulla
non so dove può essere la soluzione
vi allego comunque il file, forse è un problema di codifica.. ho messo comunque una gestione degli errori perchè in alcuni file ho problemi, non in questo che ti allego
Grazie mille :)
ps io sto vedendo young pope, devo dire che è molto bello (un po' pesante come al solito, però fico) :)
ciao
Allegati
Lime In The Coconut said @ 2016-11-07 22:05:26:
1) con un elem.lower() non risolvo il problema
No, metterlo solo su elem non ha senso.

Lime In The Coconut said @ 2016-11-07 22:05:26:
2) nel file frasi.txt se cambio la prima parola da tutto minuscolo a prima lettera maiuscola, e scrivo il termine da ricercare esattamente uguale (es: Cane) non trova nulla
non so dove può essere la soluzione

Puoi ridurre tutti gli elementi con lower(), entrambe le stringhe, per verificarne poi la presenza. Hai anche la possibilità, essendo stringhe, di ricercare tutto con find(), fai qualche prova e vedi cosa ti soddisfa di più.

Cya


Pagina: 1



Esegui il login per scrivere una risposta.