As outras respostas funcionam para arquivos reais, mas se você precisar de algo que funcione para "objetos semelhantes a arquivos", tente o seguinte:
# f is a file-like object.
f.seek(0, os.SEEK_END)
size = f.tell()
Funciona para arquivos reais e StringIO, em meus testes limitados. (Python 2.7.3.) A API "objeto semelhante a arquivo" não é realmente uma interface rigorosa, é claro, mas a documentação da API sugere que objetos semelhantes a arquivo devem suportar seek()
e tell()
.
Editar
Outra diferença entre isso e os.stat()
é que você pode stat()
criar um arquivo mesmo que não tenha permissão para lê-lo. Obviamente, a abordagem de procurar / avisar não funcionará, a menos que você tenha permissão de leitura.
Editar 2
Por sugestão de Jonathon, aqui está uma versão paranóica. (A versão acima deixa o ponteiro do arquivo no final do arquivo, portanto, se você tentar ler o arquivo, receberá zero bytes de volta!)
# 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