¿Hay alguna manera de encontrar el tamaño del búfer de un objeto de archivo?

Estoy tratando de “asignar” un archivo ASCII muy grande. Básicamente, leo líneas hasta que encuentro una determinada etiqueta y luego quiero saber la posición de esa etiqueta para poder buscarla más tarde y extraer los datos asociados.

from itertools import dropwhile with open(datafile) as fin: ifin = dropwhile(lambda x:not x.startswith('Foo'), fin) header = next(ifin) position = fin.tell() 

Ahora este tell no me da la posición correcta. Esta pregunta ha sido formulada en varias formas antes. La razón es presumiblemente porque Python está almacenando el objeto de archivo. Entonces, Python me está diciendo dónde está el puntero del archivo, no dónde está el puntero del archivo. No quiero desactivar este búfer … El rendimiento aquí es importante. Sin embargo, sería bueno saber si hay una manera de determinar cuántos bytes elige python almacenar en el búfer. En mi aplicación real, no importa si estoy cerca de las líneas que comienzan con Foo . Puedo dejar algunas líneas aquí y allá. Entonces, lo que realmente planeo hacer es algo como:

 position = fin.tell() - buffer_size(fin) 

¿Hay alguna manera de encontrar el tamaño del búfer?

Para mí, parece que el tamaño del búfer está codificado de manera rígida en Cpython para ser 8192. Por lo que puedo decir, no hay forma de obtener este número desde la interfaz de python que no sea leer una sola línea al abrir el archivo , f.tell() para averiguar la cantidad de datos que Python realmente lee y luego busque el inicio del archivo antes de continuar.

 with open(datafile) as fin: next(fin) bufsize = fin.tell() fin.seek(0) ifin = dropwhile(lambda x:not x.startswith('Foo'), fin) header = next(ifin) position = fin.tell() 

Por supuesto, esto falla en el caso de que la primera línea tenga más de 8192 bytes de longitud, pero eso no tiene ninguna consecuencia real para mi aplicación.