Textdatei einlesen, bearbeiten, in Datei schreiben

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
Phil1337
User
Beiträge: 2
Registriert: Montag 23. November 2020, 15:31

Hallo zusammen,

ich habe folgendes Problem.
Ich will eine erstellte Textdatei einlesen, diese an 4 bestimmten Zeilen bearbeiten und anschließend in der gleich Form wie sie eingelesen wurde wieder in die Datei schreiben.

Die Textdatei hat zwischen 100.000 und 300.000 Zeilen jedoch sind nur rund die letzen 50 Zeilen interessant.
Hier ein Bsp. wie die Textdatei aussieht
  • ***********************************************************
    ** Materials
    ** written by write_materials function
    ** Young's modulus unit is MPa = N/mm2
    ** FreeCAD material name: CalculiX-Steel
    ** SolidMaterial
    *MATERIAL, NAME=SolidMaterial
    *ELASTIC
    210000, 0.300
    *DENSITY
    7.6e-09

    ***********************************************************
    ** Sections
    ** written by write_femelementsets function
    *SOLID SECTION, ELSET=SolidMaterialSolid, MATERIAL=SolidMaterial

    ***********************************************************
    ** Transform Constraints
    ** written by write_constraints_transform function
    ** FemConstraintTransform
    *TRANSFORM, NSET=CylinFemConstraintTransform, TYPE=C
    0.0,0.0,10.25,0.0,0.0,-9.75

    ***********************************************************
    ** At least one step is needed to run an CalculiX analysis of FreeCAD
    ** written by write_step_begin function
    *STEP
    *STATIC
    *DLOAD
    Eall,centrif,2270000,0.,0.,0.,0.,0.,1.
wobei *DENSITY, 7.6e-09, *DLOAD, Eall,centrif,2270000,0.,0.,0.,0.,0.,1. die Wörter sind die ich der Textdatei hinzufügen möchte.

Ich habe jetzt folgendes Problem: Ich habe es bereits geschafft mit Hilfe einer Liste die Datei sauber einzulesen und bestimmte Zeilen zu bearbeiten.
Allerdings habe ich bei Listen das Problem wenn ich diese wieder in die Textdatei schreiben möchte wird jede Zeile in [diese Viereckigen Klammern] geschrieben.
Hier mein Code dazu

Code: Alles auswählen

data = list()
file = open(r"C:\Users\phili\Desktop\FEMMeshNetgen.inp","r")
for line in file:
    data.append(line.strip().split(","))
file.close()

file = open(r"C:\Users\phili\Desktop\FEMMeshNetgen.inp","a")
data[len(data)-37] = "TEST"
file.close()

with open(r"C:\Users\phili\Desktop\FEMMeshNetgen.inp","w") as output:
    for row in data:
        output.write(str(row) + '\n')
    

print(data)
Habe schon versuch mit import csv zu arbeiten.
Hat zum Teil funktioniert konnte die Datei sauber einlesen jedoch finde ich keine Lösung wie ich die eingelesen datei bearbeiten kann und wieder in die alte Datei schreiben kann.

Hat jemand zu diesen Problem eine idee wie ich die beiden Sachen kombinieren kann?
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast ja viele Zeilen, die gar keine Kommas enthalten, das split ist also viel zu optimistisch.
Dateien öffnet man mit dem with-Statement und gibt ein Encoding an.
Diese öffnen der Datei zum Anhängen ist absolut sinnfrei.
Wenn man Listeneinträge vom Schluß aus will, dann kann man einfach negative Zahlen angeben.
Du mußt natürlich genau das Gegenteil von dem machen, was Du beim Einlesen tust, nämlich die Listen wieder mit ',' zusammenstückeln.
Wobei ich das splitten gar nicht machen würde, sondern nur die tatsächlich die Zeilen ändern, die ich möchte, und die anderen exakt so lassen:

Code: Alles auswählen

with open(r"C:\Users\phili\Desktop\FEMMeshNetgen.inp", encoding="ascii") as input:
    lines = list(input)

lines[-37] = "TEST\n"

with open(r"C:\Users\phili\Desktop\FEMMeshNetgen.inp","w", encoding="ascii") as output:
    output.writelines(lines)
Phil1337
User
Beiträge: 2
Registriert: Montag 23. November 2020, 15:31

Hey Sirus3,

danke für die schnelle Antwort. Deine Lösung hat mein Problem perfekt gelöst vielen Dank.

Mfg Phil
Antworten