Pergunta

Eu estou criando arquivos esparsos em python, como segue:

>>> f = open('testfile', 'ab')
>>> f.truncate(1024000)
>>> f.close()

quando o arquivo for feito, ele leva até 0 de espaço em disco, mas o seu tamanho de inode é definida como o meu valor truncado (1000K):

igor47@piglet:~/test$ ls -lh testfile 
-rw-r--r-- 1 igor47 igor47 1000K 2010-07-09 04:02 testfile
igor47@piglet:~/test$ du -hs testfile 
0   testfile

Como faço para obter o arquivo real de uso de espaço (tamanho alocado) dentro do python?O stat retorna a chamada do arquivo tamanho aparente, e eu não tenho nenhuma idéia de como o resto, para obter o real uso que ler todo o arquivo (ele pode se tornar muito grande)

>>> os.stat('testfile').st_size
1024000
Foi útil?

Solução

>>> os.stat('testfile').st_blocks*512
0

Tadaa :)

st_blocks é o número de blocos de 512 bytes, na verdade, alocados para o arquivo.Note que st_blocks não é garantido estar presente em todos os sistemas operacionais, mas aqueles que suporta arquivos esparsos em geral.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top