Zu Stelle in Datei springen und dort überschreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Blackgarfield
User
Beiträge: 5
Registriert: Mittwoch 30. August 2006, 16:11
Wohnort: Cottbus

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
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Hm, also deine aktuelle Position bekommst Du herraus mit: f.tell() (hier nachzulesen: Link).
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.
Antworten