Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: SARGE553413 en 15 Febrero 2014, 03:27 am



Título: Duda con bufferedreader python
Publicado por: SARGE553413 en 15 Febrero 2014, 03:27 am
Hola a todos.

Uso Python 3.3.4.

Estoy haciendo una clase que lee líneas de un fichero.
Al constructor de esta clase le paso un parámetro llamado "reader". En el constructor de clase compruebo que el parámetro que me pasan es de tipo "reader", si no lo es, lanzo excepción.

Mi problema es que, no se por qué, el programa me da error cuando intento hacer el primer "readline()".

El error que me sale es:
Traceback (most recent call last):
  File "D:\Mis documentos\workspaces\Cosas\asd\p2.py", line 13, in <module>
    x = bf.readline()
AttributeError: '_io.TextIOWrapper' object has no attribute 'readinto'


¿Alguien me puede explicar que ocurre? gracias. Adjunto el código:

Código:
import threading
import io

class FileThread(threading.Thread):
    def __init__(self,reader):
        #aqí compruebo que es un BufferedReader
        if not (type(reader)==io.BufferedReader):
            raise AttributeError;
        self.n=0;
        self.m=0;
        self.s="";
        self.ls="";
        self.reader=reader;
        self.flag=False;
   
    def __largerLine(self):
        #El error ocurre en la siguiente linea
        self.s=self.reader.readline(); #ERROR
        self.ls=self.s;
        while(self.s):
            self.n=len(self.s)
            if(self.n>self.m):
                self.m=self.n;
                self.ls=self.s;
            self.s=self.reader.readline();

    def getLargerLine(self):
        return (None,self.ls)[self.flag]
   
    def run(self):
        self.__largerLine();
        self.flag=True;
   

#PRUEBAS:
fich = open("pr","r");
reader = io.BufferedReader(fich)
ft = FileThread(reader);
print(ft.getLargerLine())
ft.run();
l=ft.getLargerLine()
print(l)