[Python-de] Daten in Datei einfuegen

Georg Mischler schorsch at schorsch.com
Die Apr 27 23:20:34 CEST 2004


Alexander 'boesi' Bösecke wrote:

> Am 22.04.2004 14:32:57 schrieb Georg Mischler:
>
> > Auch unter unix wird dir "ls" eine 1MB grosse Datei anzeigen. Mit
> > "du" siehst du aber, dass sie physikalisch nur einen einzigen
> > Block belegt (512-4096k, je nach Grösse des Dateisystems).
> > Sobald du um unteren Bereich etwas reinschreibst, wird das
> > Dateisystem die dazu notwendigen Blöcke ebenfalls allozieren.
>
> Aber genau das tu ich ja mit dem file.write('.'). Das braeuchte ich dann
> also unter Unix gar nicht und ls wuerde trotzdem eine Groesse von 1MB
> anzeigen?

Solange du nichts schreibst, zeigt ls auch unter unix 0 bytes an.
Wenn du irgendwo ein Zeichen reinschreibst, dann zeigt ls eine
Grösse bis hinter der Position dieses Zeichens an. Mit du siehst
du aber, dass nur ein kleiner Bruchteil davon wirklich belegt
wird (auf meiner 18Gb reiser-Partition z.B. 6kb).

>>> f = open('testfile', 'w')
>>> f.seek(1000000)
>>> f.write('.')
>>> f.close()
>>>

$> ls -l testfile
-rw-r--r--    1 gm   users   1000001 2004-04-27 22:49 testfile
$> du -k testfile
6       testfile

Wenn ich anschliessend nochmal in der Mitte etwas reinschreibe,
dann ändert sich die Grösse für ls nicht, du wird aber dann 12k
anzeigen (nochmal 6k für einen zweiten Block).


> Windows alloziert die Bloecke auch erst, wenn man etwas
> in die Datei schreibt, aber davor ist die Datei 0 Byte gross (also auch
> nach dem file.close()).

Ja klar, aber wieviele Blöcke werden dann alloziert? Nur einer
oder gleich für die ganze Datei?


> Dazu muss ich etwas weiter ausholen.
> Ich schreibe im Rahmen meiner Studienarbeit ein P2P-System. Ich hab eine
> zentrale Struktur aehnlich wie Napster gewaehlt - es gibt einen Server,
> Peers und Clients.

Eine Reimplmentation von BitTorrent? Schau doch mal, wie das dort
gelöst ist. Zumindest unter unix wird da genau diese Eigenschaft
des Dateisystems ausgenützt.


-schorsch

-- 
Georg Mischler  --  simulations developer  --  schorsch at schorsch com
+schorsch.com+  --  lighting design tools  --  http://www.schorsch.com/