Seite 1 von 1

Wort aus der Zeile einer .inp-Datei löschen

Verfasst: Donnerstag 18. März 2021, 15:16
von maxwer
Guten Tag,

ich arbeite an einem Programm welches Informationen aus einer .inp-Datei ausliest und kopiert. Das Prinzip zum Einlesen und Kopieren von Inhalten ist mir vertraut.

Jedoch lassen sich nicht alle Inhalte einfach 1zu1 übertragen. Manche zu ändernde Zeilen habe ich mit dem beigefügtem Code bearbeitet.

Code: Alles auswählen

import os 

def main():
    with open('WPS_Elek_Elemente_oE.txt') as lines, open('WPS_Elek_Elemente.txt', 'w') as output:
        for line in lines:
            if line == '*Element, type=CAX4\n':
                line = '*Element, type=DCAX4E\n'
            if line == '*Element, type=CAX3\n':
                line = '*Element, type=DCAX3E\n'
            output.write(line)
    datei= 'WPS_Elek_Elemente_oE.txt'
    if os.path.isfile(datei):    # falls Dabei existiert 
        os.remove(datei)
if __name__ == "__main__":
    main()
Für die letzte Stufe in der Programmerstellung möchte ich einzelne Worte aus Zeilen löschen. Die Zeilen unterscheiden sich dabei von einander, sodass der hier angezeigte Code nicht sinnvoll verwendet werden kann.
Anbei ein Ausschnitt der Zeilen aus meiner inp.-Datei:

*Elset, elset=NALL, instance=Elektrode_oben, generate
1, 14575, 1
*Elset, elset=NALL, instance=Blech-1, generate
1, 5456, 1
*Elset, elset=NALL, instance=Elektrode_unten, generate
1, 14575, 1
*Elset, elset=NALL, instance=Blech-2, generate
1, 5412, 1

Das Ziel soll es sein den Begriff "instance=*Teilename*," zu löschen sodass sich folgender bereinigter Inhalt ergibt:

*Elset, elset=NALL, generate
1, 14575, 1
*Elset, elset=NALL, generate
1, 5456, 1
*Elset, elset=NALL, generate
1, 14575, 1
*Elset, elset=NALL, generate
1, 5412, 1

Meine Frage(n):
Wie kann ich ein Dokument nicht nur in seine Zeilen unterteilen sondern auch in die Wörter der Zeile?
Welchen Befehl zum entfernen des besagten Inhaltes sollte ich verwenden?
Wie kann ich "instance=..." löschen obwohl die Teilenamen nach dem Ist-Gleich-Zeichen variieren?

Re: Wort aus der Zeile einer .inp-Datei löschen

Verfasst: Donnerstag 18. März 2021, 15:50
von Sirius3
Das kannst Du entweder per Regulärem Ausdruck machen oder Du teilst eine Zeile am , auf, (str.split) erzeugst daraus eine neue Liste, die Strings, die mit instance= anfangen, nicht mehr enthält, und packst sie mit join wieder zu einem String zusammen.
split und join sollten in jedem Anfängertutorial bei den Stringfunktionen erklärt werden.

Re: Wort aus der Zeile einer .inp-Datei löschen

Verfasst: Donnerstag 18. März 2021, 16:40
von maxwer
Was wäre der reguläre Ausdruck?
Das Problem mit dem teilen der Zeilen ist, dass die ich weitere Zeilen habe in denen der gesuchte Ausdruck vorkommt, diese jedoch unterschiedlich anfangen.
Hier ein weiterer Auszug aus meiner .inp-Datei

*Nset, nset=SET-1, instance=Elektrode_oben, generate
1, 16704, 1
*Nset, nset=SET-1, instance=Elektrode_unten, generate
1, 16704, 1
*Elset, elset=SET-1, instance=Elektrode_oben, generate
1, 14575, 1
*Elset, elset=SET-1, instance=Elektrode_unten, generate
1, 14575, 1
*Nset, nset=SET-2, instance=Blech-1, generate
1, 8400, 1
*Elset, elset=SET-2, instance=Blech-1, generate
1, 5456, 1
*Nset, nset=SET-3, instance=Blech-2, generate
1, 8334, 1
*Elset, elset=SET-3, instance=Blech-2, generate
1, 5412, 1

Re: Wort aus der Zeile einer .inp-Datei löschen

Verfasst: Donnerstag 18. März 2021, 16:55
von einfachTobi
Das macht für das Teilen keinen Unterschied

Code: Alles auswählen

input_text= """*Nset, nset=SET-1, instance=Elektrode_oben, generate
1, 16704, 1
*Nset, nset=SET-1, instance=Elektrode_unten, generate
1, 16704, 1
*Elset, elset=SET-1, instance=Elektrode_oben, generate
1, 14575, 1
*Elset, elset=SET-1, instance=Elektrode_unten, generate
1, 14575, 1
*Nset, nset=SET-2, instance=Blech-1, generate
1, 8400, 1
*Elset, elset=SET-2, instance=Blech-1, generate
1, 5456, 1
*Nset, nset=SET-3, instance=Blech-2, generate
1, 8334, 1
*Elset, elset=SET-3, instance=Blech-2, generate
1, 5412, 1"""

for word in input_text.split(", "):
    if not word.startswith("instance"):
        print(word)

# bzw.

words = [word for word in input_text.split(", ") if not word.startswith("instance=")]
output = ", ".join(words)
Das musst du nur entsprechend anpassen, da du die Daten ja schon zeilenweise vorliegen hast. Aber das Prinzip sollte mit dem Beispiel klar werden.

Re: Wort aus der Zeile einer .inp-Datei löschen

Verfasst: Donnerstag 18. März 2021, 17:27
von narpfel
Mit einem regulären Ausdruck:

Code: Alles auswählen

>>> instance_re = re.compile(", instance=[^,]+")
>>> instance_re.sub("", "*Nset, nset=SET-2, instance=Blech-1, generate")
'*Nset, nset=SET-2, generate'