Seite 1 von 1

Zu Stelle in Datei springen und dort überschreiben

Verfasst: Mittwoch 14. Februar 2007, 17:06
von Blackgarfield
Servus

ich hab ein kleines Probelm:
Wie finde ich raus an welchem Byte ich mich in der Datei befinde, wenn ich zum Beispiel 8 Zeilen eingelesen habe, und einen Wert aus der 4.Zeile umgespeichert habe? Ich kann zwar die Position des Wertes (in dem Fall wird alles in bia gespeichert), den ich haben will ,genau bestimmen:

Code: Alles auswählen

begin_row_PS_XML = 5
    chdir(main_dic+dic_Para_XML)   # change directory   
    f=file(filename_XML+i+suff_XML,'r+')
    f_lines = f.readlines()   
    row = f_lines[begin_row_PS_XML-1]
    position = row.index('>')   
    bia = row[position+2:position+11]
aber ich will genau diesen Wert an dieser Stelle überschreiben und das bekomme ich nicht hin. Python schreibt alles an das Ende der Datei. Und die ganzen Bytes in der Datei zu zählen, damit ich den Zeiger mit versetzen kann will ich auch nicht. Kann mann dass nicht automatisch machen lassen ala:

gibt die byte-position des zeichens ">" aus der 4.zeile an

Danke

Verfasst: Mittwoch 14. Februar 2007, 18:32
von Masaru
Hm, also deine aktuelle Position bekommst Du herraus mit: f.tell() (hier nachzulesen: Link).

Verfasst: Mittwoch 14. Februar 2007, 18:33
von BlackJack
Das geht nicht ohne die Anzahl der Bytes zu kennen, die vor der gewünschten Stelle stehen. Sonst kann man mit `seek()`, wie Du ja selbst schon festgestellt hat, nicht dort "hinspringen".

Wenn Du mit Binärdaten arbeitest oder eine Textdatei so behandeln willst, musst Du die Datei auch im Binärmodus öffnen. Sonst ist es unter Umständen nicht möglich die Bytes zu zählen.

Das direkte Ändern funktioniert natürlich auch nur wenn die neuen Daten genau so lang sind wie die Originaldaten an der Stelle.

Aber Du liest ja sowieso die ganze Datei in den Speicher. Dann ist es am einfachsten, wenn Du die Daten dort änderst und die Datei komplett neu schreibst.