Forum >> Principianti >> importare lista da file

Pagina: 1

Ciao a tutti,
mi presento al forum già con un bel quesito da principiantissimo.

Premetto che ho iniziato a studiare da pochissimo questo programma da autodidatta.

Vorrei realizzare un programmino che banalmente mi crei una lista, la salvi su un file esterno e che all'avvio successivo la possa reimportare per poter essere modificata.

nessun problema per creare la lista


a=[raw_input("voce da aggiungere")]

lista=lista + a


nessun problema con l'esportazione della lista


out_file = open("test.txt","w")

out_file.write(str(lista))

out_file.close()


nessun problema con l'importazione della lista


in_file = open("test.txt","r")

lista = in_file.readline()

in_file.close()


il problema avviene quando alla lista importata cerco di aggiungere una nuova voce


TypeError: cannot concatenate 'str' and 'list' objects





mi manca, a quanto ne capisco, una trasformazione inversa, quella che devo fare nel momento dell'esportazione con str. Esatto?



a=[raw_input("voce da aggiungere")]



lista=lista + a
Sicuro che con questo stai facendo quello che dici? oppure stai facendo quello che credi!!
lista=lista + a
sembra più una concatenazione e probabilmente da questo l'errore che viene emesso
lista.append(a)
questo somiglia molto di più ad una aggiunta alla lista esistente
poi una volta modificata la lista devi salvare il file con le modifiche-
a=[raw_input("voce da aggiungere")]



lista=lista + a
Sicuro che con questo stai facendo quello che dici? oppure stai facendo quello che credi!!
lista=lista + a
sembra più una concatenazione e probabilmente da questo l'errore che viene emesso
lista.append(a)
questo somiglia molto di più ad una aggiunta alla lista esistente
poi una volta modificata la lista devi salvare il file con le modifiche-

Ciao!, hai ragione, non so se fa quello che credo o quello che dico ma sia con .append che con la concatenazione la lista funzione e vengono aggiunte le voci. Le voci non vengono più aggiunte nel momento in cui importo la lista (in entrambi i casi append/concatenazione)

se sostituisco

lista=lista + a con lista.append(a) ottengo il seguente errore quando dopo averla importata gli faccio aggiungere una voce

Traceback (most recent call last):
File "C:\Python27\elenco.py", line 19, in <module>
lista.append(a)
AttributeError: 'str' object has no attribute 'append'
:(
Scusami, ma il mio intento non era quello di darti la soluzione diretta al quesitoposto
ma farti ragionare sull'errore che ti veniva esposto per poter ragionare su che cosa stai sbagliando,
nel primo caso:
TypeError: cannot concatenate 'str' and 'list' objects
nel secondo:
AttributeError: 'str' object has no attribute 'append' 
nel primo caso ti sta dicendo che non puoi concatenare una stringa con una lista
nel secondo ti stà dicendo che la stringa non ha un attributo/metodo append ciò dovrebbe farti pensare o capire che non stai lavorando con un a lista ma con una stringa....
da qui un po di ragionamento su quello che vuoi fare e quello che credi di fare ....
pensaci un pochino e vedrai che riesci nell'intento se proprio non riesci posta ancora e vediamo di spiegare meglio.

hai perfettamente ragione! ci devo arrivare io altrimenti non imparo più!!!!
ma credo di essere entrato in un circolo di pensiero da cui non esco.

comprendo che un oggetto non pùò concatenarsi con una stringa e viceversa ma mi obbliga a trasformare la mia lista in stringa per poterla scrivere sul file...

A questo punto ho un file esterno con una stringa da dover trasformare in lista... non solo, devo risolvere il fatto che
valore=raw_input("cosa devo aggiungere alla lista?")

a.append(valore)


cerco di aggiungere alla lista una stringa e questo non è consentito.


sostanzialmente tutte le stringhe devo trasformarle in liste ed a fine programma la lista in stringa.... giusto? :sarcastic:
sostanzialmente tutte le stringhe devo trasformarle in liste ed a fine programma la lista in stringa.... giusto? :sarcastic:

Si può dire che ora stai percorrendo la strada giusta,
Voglio solo farti ragionare un altro pochino,
Che tipo di file stai utilizzando?
è un file di testo quindi gli "oggetti" che puoi scrivere sul file sono per forza di cose "oggetti" stringa.
Ovviamente una stringa è una sequenza di caratteri che si può suddividere, gli "oggetti" ottenuti dalla suddivisione sono ancora degli "oggetti" stringa ma ora si possono far appartenere a una lista ..... o potrebbero essere diventati una lista .....

a.append(valore)
a in questo caso è la lista
valore è la stringa ce vai ad aggiungere alla lista
append è un metodo delle liste

Ripeto stai utilizzando un file di testo quindi.....
se vuoi salvare oggetti per come sono, prova a dare un occhiata al modulo shelve se non erro il nome.
Ho riletto con un po più attenzione il codice che hai postato sul primo post:
lista = in_file.readline()

cosi scritto lista corrisponderà alla sola ultima
lista = in_file.readlines()
la lista comprenderà tutte le righe del file,
piccolo suggerimento che forse ti potrebbe aiutare a ragionare,
aggiungi questo nel codice:
print type(lista)
in questa posizione:
in_file = open("ricette.txt","r")

lista = in_file.readline()
print type(lista)#<--------------------
in_file.close()

print lista




--- Ultima modifica di Orsogrizzly in data 2016-03-31 16:30:04 ---

--- Ultima modifica di Orsogrizzly in data 2016-03-31 16:31:00 ---

--- Ultima modifica di Orsogrizzly in data 2016-03-31 16:31:34 ---


Pagina: 1



Esegui il login per scrivere una risposta.