Liste an einer Steller einer anderen Liste einfügen

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
Hermine
User
Beiträge: 2
Registriert: Dienstag 20. September 2011, 21:05

Hallo zusammen,
ich bin totaler Anfänger und hab mir schon mit Hilfe mancher Beiträge aus dem Forums ein tolles Skript geschrieben. Dennoch
plage ich mich schon tagelang mit dem Problem rum, dass ich eine Datei (alte Datei) besitze in die ich, an einer definierten Stelle (LANDPROFILE_1), eine neue Liste einfügen möchte, die dann auch genau die gleiche Formatierung beibehalten muß.

Meine alte Datei sieht so aus (nur ein Ausschnitt):

block LANDPROFGEN
{
STRING COMMENT=" "
INT INPUTDELTA = 1
INT ONEDPROFILE = 0
}
block LANDPROFILE_1
}


Neue Liste (nur ein Ausschnitt):

block LANDPROFILE_1
{
DOUBLE AXIALPOS(29) [m] = 0.000000e+00 1.190000e-03 3.190000e-03 5.190000e-03 7.190000e-03 9.190000e-03 1.119000e-02 1.319000e-02 1.519000e-02 1.719000e-02
1.919000e-02 2.119000e-02 2.319000e-02 2.419000e-02 2.619000e-02 2.719000e-02 2.819000e-02 3.019000e-02 3.219000e-02 3.419000e-02
3.619000e-02 ...


Und wie gesagt möchte ich die Neue Liste jetzt in die alte Datei an der Position block LANDPROFILE_1 einfügen.
Ich habe schon einen Teil geschrieben der mir das zwar macht aber ich bekomme es einfach nicht hin, dass danach die Formatierung noch stimmt.

Hier mein Ansatzt:

Code: Alles auswählen

    search_text = 'block LANDPROFILE_1'
    replace_text = str(dateiNeu) # liste hier als string umgewandelt
    
    for line in fileinput.input('alte_Datei.txt,inplace=1):
        line = line.replace(search_text, replace_text)
        sys.stdout.write(line)
Ergebnis:
['\tblock LANDPROFILE_1\n', '\t{\n', '\t\tDOUBLE AXIALPOS(29) [m] =', ' 0.000000e+00' .... (Geht noch weiter!!)
Anderst hab ich es leider noch nicht geschaft. Wie kann man das so machen, dass die Formatierung die gleiche ist wie in der Datei Neue Liste?
:K :K
Super wäre es wen mir hierbei jemand helfen könnte. :D
Grüße,
Hermine
Zuletzt geändert von Anonymous am Dienstag 20. September 2011, 22:10, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@Hermine: Der Quelltext ist syntaktisch offensichtlich falsch. Und in der Zeile mit dem Kommentar ist der Fehler. Du wandelst eine Liste in eine Zeichenkettendarstellung der Liste um. Das sieht dann eben so aus wie Du das beschreibst. Du willst aber die Zeichenketten in der Liste zu einer Zeichenkette zusammenfügen. Schau Dir einfach mal an welche Methoden auf `str` zur Verfügung stehen. Eine davon ist genau für so etwas vorgesehen.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Hermine hat geschrieben:

Code: Alles auswählen

    search_text = 'block LANDPROFILE_1'
    replace_text = str(dateiNeu) # liste hier als string umgewandelt
    
    for line in fileinput.input('alte_Datei.txt,inplace=1):
        line = line.replace(search_text, replace_text)
        sys.stdout.write(line)
Du unterschlägst hier entscheidenden Code, wie z.B. die Stelle, an der dateiNeu definiert wird. dateiNeu enthält offensichtlich nicht das, was du glaubst.

Du hast folgende Aufgaben:
1. Die Datei mit dem Ersatztext einlesen
2. Über die Originaldatei laufen und ersetzen

Code: Alles auswählen

search_text = 'block LANDPROFILE_1'

with open('replacer_text.txt', 'r') as fp:
    replace_text = fp.read()

for line in fileinput.input('replacer_oldfile.txt', inplace=1):
    line = line.replace(search_text, replace_text)
    sys.stdout.write(line)
Das with-Statement erlaubt es dir die Datei zu öffnen, ohne dass du dich explizit darum kümmern musst sie wieder zu schließen. Im Kontext einer sinnvollen Fehlerbehandlung entfaltet das seine volle Schönheit.

Wenn man mit nur einer Datei arbeitet würde ich übrigens openverwenden statt fileinput.input. fileinput.input ist so ... invasiv.

Code: Alles auswählen

with open('replacer_oldfile.txt', 'r') as fp:
    for line in fp:
        line = line.replace(search_text, replace_text)
        print line
Statt des print muss man dann natürlich in eine zweite Datei schreiben.
Hermine
User
Beiträge: 2
Registriert: Dienstag 20. September 2011, 21:05

Also vielen Dank für deine Hilfe.
Leider bin ich erst jetzt dazu gekommen es umzusetzen.
Aber es funktioniert alles wunderbar.

Liebe Grüße,
Antworten