On Mon, Feb 08, 2010 at 09:04:05AM +0100, Diego Barrera wrote: > Carlo C8E Miron ha scritto: > > Seh. Mai postare prima di colazione. Rifo. > > > > On Sun, Feb 7, 2010 at 13:02, Carlo C8E Miron <carlo.mi...@gmail.com> wrote: > > > >> Ciao, > >> prova con:: > >> > >> 2010/2/7 Diego Barrera <diegonebarr...@yahoo.it>: > >> > >>> <code> > >>> > >>> #!/usr/bin/python > >>> > >>> class FilePrelievo(file): > >>> def __init__(self,fileName): > >>> self.file=open(fileName,'r') > >>> > > ^ il typo era qui!!1 > [cut] > > Non ho capito perche' devo fare cosi'.. > la mia classe FilePrelievo eredita gli attributi e i metodi della classe > file, inoltre ha i vari attributi che definisco in __init__ > Quando poi definisco il metodo leggiLinea, passo come argomento proprio > self.. ma self.readline() chiamato da leggiLinea, non punta al file gia' > aperto.. perche'?
perché in realtà quando crei la classe `FilePrelievo` non puoi fare:: self = open(filename, 'r') perché non assegni al'istanza di `FilePrelievo` il nuovo file descriptor ma invece fai un `rebind` della variabile self. di seguito ti scrivo una possibile soluzione #!/usr/bin/python import sys class FilePrelievo(file): separator = ';' def __init__(self, fileName): # invoca il costruttore e quindi questa istanza # ha associato veramente un file descriptor ora super(FilePrelievo, self)__init__(fileName, 'r') # queste non le usi ... # dataSet=[] # linea=[] def leggiLinea(self): linea = self.readline() if linea: return map(str.strip, linea.split(self.separator)) return linea # lista=linea.split(';') # newlista=[] # for x in lista: # x=MyStringTool.CleanInizio(x) # x=MyStringTool.CleanFine(x) # newlista.append(x) # return newlista def stampa(self, stream=sys.stdout): print >> stream, self fp = FilePrelievo('temp') li = [] while 1: l = fp.leggiLinea() if l: li.append(l) else: break fp.close() print li come vedi sono molte linee in meno. python è bello per questo, in poco ottieni tanto :) ti conviene cercare qualche buona guida di python in linea, ne troverai tante. quella che viene (veniva?) consigliata sempre a chi proviene da altri linguaggi è diveintopython e in più ho visto che ne hanno scritta una anche per python3. comunque ti ripeto (non so' se hai ricevuto la mia precedente email) che ti conviene usare il modulo `csv` se questo non vuole essere solo un esercizio per imparare python. ciao m. ps. il codice non è testato ma credo (leggi spero :) che funzioni -- Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law. _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python