Estou escrevendo um script Python no Windows. Eu quero fazer algo com base no tamanho do arquivo. Por exemplo, se o tamanho for maior que 0, enviarei um email para alguém, caso contrário, continuarei para outras coisas.
Como verifico o tamanho do arquivo?
Path('./doc.txt').stat().st_size
Respostas:
Você precisa da
st_size
propriedade do objeto retornado poros.stat
. Você pode obtê-lo usandopathlib
(Python 3.4+):ou usando
os.stat
:A saída está em bytes.
fonte
stat_result.st_blocks
pelo tamanho do bloco, mas ainda estou pesquisando como obtê-lo de forma programática e multiplataforma (não viatune2fs
etc.)Usando
os.path.getsize
:A saída está em bytes.
fonte
os.path.getsize
é simplesmentereturn os.stat(filename).st_size
os.stat
. Em seguida, a diferença pode executar em um número substancial de microssegundos :-)As outras respostas funcionam para arquivos reais, mas se você precisar de algo que funcione para "objetos semelhantes a arquivos", tente o seguinte:
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()
etell()
.Editar
Outra diferença entre isso e
os.stat()
é que você podestat()
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!)
fonte
os
, em vez disso, escrevaf.seek(0, 2)
para buscar 0 bytes no final.os
não for usada:f.seek(old_file_position, 0)
os
.size
saída está em bytes?#seek()
: wiki.sei.cmu.edu/confluence/display/c/...Resultado:
fonte
this function will convert bytes to MB.... GB... etc
Errado. Esta função irá converter bytes para MiB, GiB, etc. Veja este post .return f'{num:.1f} {x}'
em Python> = 3.5.Usando
pathlib
( adicionado no Python 3.4 ou em um backport disponível no PyPI ):Esta é realmente apenas uma interface
os.stat
, mas o usopathlib
fornece uma maneira fácil de acessar outras operações relacionadas a arquivos.fonte
Existe um
bitshift
truque que eu uso se quiser converter debytes
para qualquer outra unidade. Se você faz o turno certo,10
basicamente o desloca por um pedido (múltiplo).fonte
Seguindo rigorosamente a pergunta, o código Python (+ pseudo-código) seria:
fonte
fonte
nós temos duas opções Ambos incluem a importação do módulo os
1) A função import os como os.stat () retorna um objeto que contém tantos cabeçalhos, incluindo o tempo de criação do arquivo e o horário da última modificação, etc. Entre eles, st_size () fornece o tamanho exato do arquivo.
os.stat ("nome do arquivo"). st_size ()
2) import os Neste, temos que fornecer o caminho exato do arquivo (caminho absoluto), não um caminho relativo.
os.path.getsize ("caminho do arquivo")
fonte