2010-07-09 20 views
8

ich Sparse-Dateien in Python bin wie folgt zu erstellen:spärlich Dateiverwendung in Python

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

, wenn die Datei ausgeführt wird, dauert es schon mit 0 Speicherplatz, aber seine Inode Größe auf meinen abgeschnittenen Wert gesetzt (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 

Wie bekomme ich die tatsächliche Raumnutzung der Datei in Python? der stat Aufruf gibt die scheinbare Größe der Datei, und ich habe keine Ahnung, wie sonst die reale Nutzung anderen zu bekommen, als die gesamte Datei zu lesen (es kann sehr groß werden)

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

auf eine Randnotiz, wenn Sie sparse Dateien mit Python shutil Modul kopieren, wird dies nicht funktionieren, wie Shutil keine Sparse-Dateien unterstützt. –

Antwort

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

Tadaa :)

st_blocks ist die Anzahl der tatsächlich der Datei zugewiesenen 512-Byte-Blöcke. Beachten Sie, dass st_blocks nicht garantiert in allen Betriebssystemen vorhanden ist, aber diejenigen, die Sparse-Dateien unterstützen, tun dies in der Regel.

+3

'st_blksize' liefert die tatsächliche Blockgröße des Dateisystems. Im Allgemeinen muss es nicht 512 Bytes sein. – SilentGhost

+4

Ich war für einen Moment verwirrt, aber das ist nicht wahr. 'st_blksize' ist die" bevorzugte "Dateisystemblockgröße. 'st_blocks 'ist garantiert in Blöcken von 512 Bytes (siehe die Manpage). – wump

+0

Diese spezielle Lösung funktionierte heute Morgen, aber nachdem ich den Server gewechselt hatte, hörte es plötzlich auf zu arbeiten. Hast du einen Ratschlag dazu? – Hgeg