2010-07-09 4 views
8

estoy creando archivos dispersos en pitón de la siguiente manera:uso del archivo disperso en Python

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

cuando el archivo se hace, que ocupa espacio en disco 0, pero su tamaño i-nodo se establece en el valor de mi truncada (1000K):

[email protected]:~/test$ ls -lh testfile 
-rw-r--r-- 1 igor47 igor47 1000K 2010-07-09 04:02 testfile 
[email protected]:~/test$ du -hs testfile 
0 testfile 

¿Cómo consigo el uso del espacio real de la archivo dentro de pitón? la llamada stat devuelve el tamaño aparente del archivo, y no tengo ni idea de qué otra manera de obtener el uso real que leer todo el archivo (que puede llegar a ser bastante grande)

>>> os.stat('testfile').st_size 
1024000 
+1

en una nota lateral, si está copiando archivos dispersos utilizando el módulo shutil de python, esto no funcionará, ya que shutil no admite archivos dispersos. –

Respuesta

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

Tadaa :)

st_blocks es la cantidad de bloques de 512 bytes realmente asignados al archivo. Tenga en cuenta que no se garantiza que st_blocks esté presente en todos los sistemas operativos, pero los que admiten archivos dispersos generalmente lo tienen.

+3

'st_blksize' proporciona el tamaño de bloque real del sistema de archivos. En términos generales, no tiene que ser 512 bytes. – SilentGhost

+4

Estaba confundido por un momento, pero eso no es cierto. 'st_blksize' es el tamaño de bloque del sistema de archivos" preferido ". 'st_blocks' está garantizado en bloques de 512 bytes (ver la página de manual). – wump

+0

Esta solución en particular estaba funcionando esta mañana, pero después de haber cambiado la máquina del servidor, de repente dejó de funcionar. ¿Tienes algún consejo sobre eso? – Hgeg

Cuestiones relacionadas