Las otras respuestas funcionan para archivos reales, pero si necesita algo que funcione para "objetos similares a archivos", intente esto:
# f is a file-like object.
f.seek(0, os.SEEK_END)
size = f.tell()
Funciona para archivos reales y StringIO, en mis pruebas limitadas. (Python 2.7.3.) La API "objeto tipo archivo" no es realmente una interfaz rigurosa, por supuesto, pero la documentación de la API sugiere que los objetos tipo archivo deberían admitir seek()
y tell()
.
Editar
Otra diferencia entre esto y os.stat()
es que puede stat()
crear un archivo incluso si no tiene permiso para leerlo. Obviamente, el enfoque de buscar / contar no funcionará a menos que tenga permiso de lectura.
Editar 2
A sugerencia de Jonathon, aquí hay una versión paranoica. (La versión anterior deja el puntero del archivo al final del archivo, por lo que si intenta leer el archivo, ¡obtendrá cero bytes!)
# f is a file-like object.
old_file_position = f.tell()
f.seek(0, os.SEEK_END)
size = f.tell()
f.seek(old_file_position, os.SEEK_SET)
Path('./doc.txt').stat().st_size