Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Python - leggere un file una riga per volta per poi aggiungere ogni riga come elemento di una lista
Forum - Python - leggere un file una riga per volta per poi aggiungere ogni riga come elemento di una lista

Avatar
xunil32 (Normal User)
Newbie


Messaggi: 7
Iscritto: 05/09/2011

Segnala al moderatore
Postato alle 14:28
Venerdì, 11/11/2011
Salve a tutti,
come da titolo (leggermente mastodontico, ma vado di fretta e non mi viene in mente nient'altro)
vorrei sapere come leggere un file una riga alla volta ed inserirlo in una lista.
Io ho buttato giù questo
Codice sorgente - presumibilmente Python

  1. f=open("domande.txt","r")
  2. b=f.readlines()
  3. conta=len(b)
  4. domande=["","","","",""]
  5. a=0
  6. while a<conta:
  7.         domande[a]=f.readline()[a]
  8.         a=a+1
  9. f.close()
  10. print domande



Aspetto i vostri insulti/chiarimenti :D

PM Quote
Avatar
Shocker000 (Member)
Rookie


Messaggi: 44
Iscritto: 06/11/2011

Segnala al moderatore
Postato alle 15:12
Venerdì, 11/11/2011
Testo quotato

Postato originariamente da xunil32:

Salve a tutti,
come da titolo (leggermente mastodontico, ma vado di fretta e non mi viene in mente nient'altro)
vorrei sapere come leggere un file una riga alla volta ed inserirlo in una lista.
Io ho buttato giù questo
Codice sorgente - presumibilmente Python

  1. f=open("domande.txt","r")
  2. b=f.readlines()
  3. conta=len(b)
  4. domande=["","","","",""]
  5. a=0
  6. while a<conta:
  7.         domande[a]=f.readline()[a]
  8.         a=a+1
  9. f.close()
  10. print domande



Aspetto i vostri insulti/chiarimenti :D


1)Ma il tuo codice funziona?O.o
2)cosa non ti è chiaro?
3)Ci sono soluzioni molto più semplici come:
Codice sorgente - presumibilmente Python

  1. f = open('domande.txt','r')
  2. domande = [x for x in f.readlines()] #list comprehension
  3. f.close()
  4. for x in domande:
  5.      print x


4)Hai letto la PEP8?

Ciao :)

Ultima modifica effettuata da Shocker000 il 11/11/2011 alle 15:15
PM Quote
Avatar
xunil32 (Normal User)
Newbie


Messaggi: 7
Iscritto: 05/09/2011

Segnala al moderatore
Postato alle 16:36
Venerdì, 11/11/2011
Adesso mi è tutto chiaro, grazie mille! :D
non capisco invece perchè non posso inserire un valore nella lista in questo modo:
Codice sorgente - presumibilmente Plain Text

  1. a=2
  2. domande[a]= f.readline()[a]


Grazie infinite per la pazienza :)

Ultima modifica effettuata da xunil32 il 11/11/2011 alle 16:40
PM Quote
Avatar
Shocker000 (Member)
Rookie


Messaggi: 44
Iscritto: 06/11/2011

Segnala al moderatore
Postato alle 17:00
Venerdì, 11/11/2011
Testo quotato

Postato originariamente da xunil32:

Adesso mi è tutto chiaro, grazie mille! :D
non capisco invece perchè non posso inserire un valore nella lista in questo modo:
Codice sorgente - presumibilmente Plain Text

  1. a=2
  2. domande[a]= f.readline()[a]


Grazie infinite per la pazienza :)


Lo puoi fare ma non è tanto efficiente ne affidabile, prima di tutto non sai la lunghezza della stringa, quindi alcune volte ti può andare bene salvando n caratteri in una variabile, ma molto probabilmente continuando il ciclo l'interprete ti segnalerà un errore tipo:  'string index out of the range'.
Inoltre readline() legge una sola righa ergo: basta fare domande[a] = f.readline() e non domande[a] = f.readline()[a] che ti salverebbe solo n caratteri a seconda del valore di a per esempio:
Codice sorgente - presumibilmente Python

  1. #a arriva  a 2 con while
  2. domande[a] = f.readline()[a] #facciamo che radline legge la seguente stringa:'questa è una domanda'


cosa conterrà domande[a] ? conterrà la stringa  'qu' e non 'questa è una domande'; andando avanti con il ciclo, readline() leggerà un'altra riga(facciamo che questa riga è vuota, quindi ' ') ed ecco che ti ritrovi con a = 3 ed un errore :pat:
Leggi anche qui :D http://docs.python.it/html/lib/bltin-file-objects.html

Ciao:)

Ultima modifica effettuata da Shocker000 il 11/11/2011 alle 17:03
PM Quote
Avatar
xunil32 (Normal User)
Newbie


Messaggi: 7
Iscritto: 05/09/2011

Segnala al moderatore
Postato alle 18:49
Venerdì, 11/11/2011
Capito! grazie infinite per la pazienza.. ma avrei un ultima domanda :D
facendo in questo modo, ossia caricando le domande (si è un quiz)
e le risposte da un file txt ho un inconveniente... le stampa con alla fine il carattere di tabulazione \n o \t ... why? :noway:

PM Quote
Avatar
Shocker000 (Member)
Rookie


Messaggi: 44
Iscritto: 06/11/2011

Segnala al moderatore
Postato alle 19:09
Venerdì, 11/11/2011
Testo quotato

Postato originariamente da xunil32:

Capito! grazie infinite per la pazienza.. ma avrei un ultima domanda :D
facendo in questo modo, ossia caricando le domande (si è un quiz)
e le risposte da un file txt ho un inconveniente... le stampa con alla fine il carattere di tabulazione \n o \t ... why? :noway:


\t\n sono caratteri speciali è strano che un print ti stampi Domanda\t\n  
e non
Codice sorgente - presumibilmente Plain Text

  1. Domanda  
  2.  
  3. >>>


forse intendi che ti stampa gli elementi della lista con \n o \t?
Comunque per questo genere di cose puoi sempre usare un dizionario :) ti semplifica la vita :k:

Ultima modifica effettuata da Shocker000 il 11/11/2011 alle 19:11
PM Quote
Avatar
xunil32 (Normal User)
Newbie


Messaggi: 7
Iscritto: 05/09/2011

Segnala al moderatore
Postato alle 14:30
Martedì, 15/11/2011
Quello che intendevo dire è che li aggiunge alla lista compresi i caratteri speciali es:

["che tempo fa?\n","che giorno e'\t"] etc etc
[\code]
in ogni caso come mi hai consigliato ho utilizzato i dizionari :k:
grazie ancora per la pazienza dimostrata :rofl:

PM Quote
Avatar
Shocker000 (Member)
Rookie


Messaggi: 44
Iscritto: 06/11/2011

Segnala al moderatore
Postato alle 15:00
Martedì, 15/11/2011
Testo quotato

Postato originariamente da xunil32:

Quello che intendevo dire è che li aggiunge alla lista compresi i caratteri speciali es:

["che tempo fa?\n","che giorno e'\t"] etc etc
[\code]
in ogni caso come mi hai consigliato ho utilizzato i dizionari :k:
grazie ancora per la pazienza dimostrata :rofl:


PM Quote