Voglio usare un flusso bufferizzato perché voglio usare un metodo peek()
per sbirciare in avanti ma usare il mio flusso con un altro metodo che si aspetta un oggetto simile a un file. (Userei seek()
ma può avere per gestire in filodiffusione-in I/O che non supporta l'accesso casuale.)python: usando io.BufferedReader su uno stream ottenuto con open()?
Ma questo banco di prova fallisce:
AttributeError: 'file' oggetto non ha attributo ' _checkReadable'
import sys
import io
srcfile = sys.argv[1]
with open(srcfile, 'rb') as f:
fbuf = io.BufferedReader(f)
print fbuf.read(20)
che cosa sta succedendo e come posso risolvere il problema? Pensavo che BufferedReader avesse lo scopo di bufferizzare un flusso. In tal caso, perché la funzione open()
non restituisce qualcosa che sia compatibile con esso?
E 'interessante. Anche se abbiamo le stesse versioni (2.7.x), otteniamo messaggi di errore leggermente diversi. – username
L'ho scoperto. C'è un commento in io.py come "" "Le descrizioni dei metodi e le implementazioni predefinite sono ereditate dalla versione C." "Quindi dipende dalle versioni c o dal sistema operativo. – username
@username: non è specifico per il sistema operativo. My Python 2.6.7 si lamenta anche di '_checkReadable', mentre il mio 2.7.2 si lamenta di' readable'.Non riesco a trovare il commit in questo momento, ma questo probabilmente è stato cambiato da qualche parte tra 2.7.0 e 2.7.2. –