Werte aus einer .dat Datei (aus ABAQUS Berechnung) in Python einlesen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Hallo,

ich habe mit Abaqus eine Berechnung durchgeführt. Die Ergebnisse werden in einer .dat Datei ausgegeben. Jedoch nicht in Spalten und Zeilen, sondern mit viel Text und SchnickSchanck (siehe Bild). Von dem ganzen .dat File interessieren mich eigentlich nur die Werte in Zeile (219 und 220), welche zusammengehören dann Zeile (234 und 240) und (258 und 259). Mein Problem ist, dass ich nicht weiß, wie man die Werte aus den entsprechenden "Zeilenpaaren" in Python als Array einliest, um dort mit ihnen zu arbeiten.
Kann mir da jemand helfen?

Hier die Links zu den Bildern:

https://www.file-upload.net/download-14 ... t.PNG.html
https://www.file-upload.net/download-14 ... 1.PNG.html

Viele Grüße
Nino
Sirius3
User
Beiträge: 18221
Registriert: Sonntag 21. Oktober 2012, 17:20

Statt hier Bilder zu posten, kannst Du auch einfach den Inhalt hier ins Forum hineinkopieren.
An was erkennst Du, dass Du genau diese Zeilen möchtest? Wenn Du das weißt, kannst Du die Datei Zeilenweise durchgehen und falls die Bedingung erfüllt ist, diese Zeilen herausfiltern.
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

An den rot markierten Zeilen sehe ich, dass ich das nachfolgende brauche und die blauen sind die, die ich brauche. Grün markiert sind die Überschriften der jeweiligen Werkstoffwerte.


Abaqus 2020 Date 08-Dec-2020 Time 11:35:52
For use by FRAUNHOFER GESELLSCHAFT ZUR FOERDERUNG DER ANGEWANDTEN FORSCHUNG EV under license from Dassault Systemes or its subsidiary.



The Abaqus Software is a product of:

Dassault Systemes SIMULIA Corp.
1301 Atwood Avenue, Suite 101W
Johnston, RI 02919, USA



The Abaqus Software is available only under license
from Dassault Systemes or its subsidiary and may be
used or reproduced only in accordance with the terms
of such license.

On machine node052
you are authorized to run
Abaqus/Standard until 31-Dec-2020

Your site id is: 200000000003598



For assistance or any other information you may
obtain contact information for your local office
from the world wide web at:

http://www.3ds.com/products/simulia/locations/


* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* ***************** *
* * N O T I C E * *
* ***************** *
* *
* *
* Abaqus 2020 *
* *
* BUILD ID: 2019_09_13-19.49.31 163176 *
* *
* *
* Please make sure you are using *
* release Abaqus 2020 manuals *
* plus the notes accompanying this release. *
* *
* *
* *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *






PROCESSING PART, INSTANCE, AND ASSEMBLY INFORMATION
*******************************************************


END PROCESSING PART, INSTANCE, AND ASSEMBLY INFORMATION
***********************************************************

*CONTOUR INTEGRAL, CONTOURS=10, TYPE=J, OUTPUT=BOTH, SYMM
*CONTOUR INTEGRAL, CONTOURS=10, TYPE=K FACTORS, OUTPUT=BOTH, SYMM
*CONTOUR INTEGRAL, CONTOURS=10, TYPE=T-STRESS, OUTPUT=BOTH, SYMM



OPTIONS BEING PROCESSED
***************************


*HEADING
ABAQUS job created on 10-Nov-20 at 17:13:01
*NODE
*ELEMENT, TYPE=CPE8, ELSET=PR2D
*NSET, NSET=XJ01, GENERATE
*ELSET, ELSET=ZUG, GENERATE
*ELSET, ELSET=ZUG_1, GENERATE
*ELSET, ELSET=RUB
*MATERIAL, NAME=EL200
*ELASTIC, TYPE=ISO
*SOLID SECTION, ELSET=PR2D, MATERIAL=EL200
*SOLID SECTION, ELSET=PR2D, MATERIAL=EL200
*BOUNDARY, OP=NEW
*BOUNDARY, OP=NEW
*BOUNDARY, OP=NEW
*BOUNDARY, OP=NEW
*OUTPUT, FIELD
*ELEMENT OUTPUT
*OUTPUT, FIELD
*ELEMENT OUTPUT
*OUTPUT, FIELD
*ELEMENT OUTPUT
*STEP, INC=5000
*OUTPUT, FIELD
*STEP, INC=5000
*STEP, INC=5000
*STATIC, DIRECT
*DLOAD, OP=NEW
*OUTPUT, FIELD
*NODE OUTPUT
*ELEMENT OUTPUT
*END STEP
*BOUNDARY, OP=NEW
*BOUNDARY, OP=NEW
*STEP, INC=5000
*STATIC, DIRECT
*CONTOUR INTEGRAL, CONTOURS=10, TYPE=J, OUTPUT=BOTH, SYMM
*CONTOUR INTEGRAL, CONTOURS=10, TYPE=K FACTORS, OUTPUT=BOTH, SYMM
*CONTOUR INTEGRAL, CONTOURS=10, TYPE=T-STRESS, OUTPUT=BOTH, SYMM
*END STEP



P R O B L E M S I Z E


NUMBER OF ELEMENTS IS 564
NUMBER OF NODES IS 1801
NUMBER OF NODES DEFINED BY THE USER 1801
TOTAL NUMBER OF VARIABLES IN THE MODEL 3602
(DEGREES OF FREEDOM PLUS MAX NO. OF ANY LAGRANGE MULTIPLIER
VARIABLES. INCLUDE *PRINT,SOLVE=YES TO GET THE ACTUAL NUMBER.)



END OF USER INPUT PROCESSING



JOB TIME SUMMARY
USER TIME (SEC) = 0.19000
SYSTEM TIME (SEC) = 3.00000E-02
TOTAL CPU TIME (SEC) = 0.22000
WALLCLOCK TIME (SEC) = 0
1

Abaqus 2020 Date 08-Dec-2020 Time 11:35:53
For use by FRAUNHOFER GESELLSCHAFT ZUR FOERDERUNG DER ANGEWANDTEN FORSCHUNG EV under license from Dassault Systemes or its subsidiary.

ABAQUS job created on 10-Nov-20 at 17:13:01 STEP 1 INCREMENT 1
TIME COMPLETED IN THIS STEP 0.00


S T E P 1 S T A T I C A N A L Y S I S




FIXED TIME INCREMENTS
TIME INCREMENT IS 1.00
TIME PERIOD IS 1.00

LINEAR EQUATION SOLVER TYPE DIRECT SPARSE

M E M O R Y E S T I M A T E

PROCESS FLOATING PT MINIMUM MEMORY MEMORY TO
OPERATIONS REQUIRED MINIMIZE I/O
PER ITERATION (MB) (MB)

1 1.74E+07 22 33

NOTE:
(1) SINCE ABAQUS DOES NOT PRE-ALLOCATE MEMORY AND ONLY ALLOCATES MEMORY AS NEEDED DURING THE ANALYSIS,
THE MEMORY REQUIREMENT PRINTED HERE CAN ONLY BE VIEWED AS A GENERAL GUIDELINE BASED ON THE BEST
KNOWLEDGE AVAILABLE AT THE BEGINNING OF A STEP BEFORE THE SOLUTION PROCESS HAS BEGUN.
(2) THE ESTIMATE IS NORMALLY UPDATED AT THE BEGINNING OF EVERY STEP. IT IS THE MAXIMUM VALUE OF THE
ESTIMATE FROM THE CURRENT STEP TO THE LAST STEP OF THE ANALYSIS, WITH UNSYMMETRIC SOLUTION TAKEN
INTO ACCOUNT IF APPLICABLE.
(3) SINCE THE ESTIMATE IS BASED ON THE ACTIVE DEGREES OF FREEDOM IN THE FIRST ITERATION OF THE
CURRENT STEP, THE MEMORY ESTIMATE MIGHT BE SIGNIFICANTLY DIFFERENT THAN ACTUAL USAGE FOR
PROBLEMS WITH SUBSTANTIAL CHANGES IN ACTIVE DEGREES OF FREEDOM BETWEEN STEPS (OR EVEN WITHIN
THE SAME STEP). EXAMPLES ARE: PROBLEMS WITH SIGNIFICANT CONTACT CHANGES, PROBLEMS WITH MODEL
CHANGE, PROBLEMS WITH BOTH STATIC STEP AND STEADY STATE DYNAMIC PROCEDURES WHERE ACOUSTIC
ELEMENTS WILL ONLY BE ACTIVATED IN THE STEADY STATE DYNAMIC STEPS.
(4) FOR MULTI-PROCESS EXECUTION, THE ESTIMATED VALUE OF FLOATING POINT OPERATIONS FOR EACH PROCESS
IS BASED ON AN INITIAL SCHEDULING OF OPERATIONS AND MIGHT NOT REFLECT THE ACTUAL FLOATING
POINT OPERATIONS COMPLETED ON EACH PROCESS. OPERATIONS ARE DYNAMICALLY BALANCED DURING EXECUTION,
SO THE ACTUAL BALANCE OF OPERATIONS BETWEEN PROCESSES IS EXPECTED TO BE BETTER THAN THE ESTIMATE
PRINTED HERE.
(5) THE UPPER LIMIT OF MEMORY THAT CAN BE ALLOCATED BY ABAQUS WILL IN GENERAL DEPEND ON THE VALUE OF
THE "MEMORY" PARAMETER AND THE AMOUNT OF PHYSICAL MEMORY AVAILABLE ON THE MACHINE. PLEASE SEE
THE "ABAQUS ANALYSIS USER'S MANUAL" FOR MORE DETAILS. THE ACTUAL USAGE OF MEMORY AND OF DISK
SPACE FOR SCRATCH DATA WILL DEPEND ON THIS UPPER LIMIT AS WELL AS THE MEMORY REQUIRED TO MINIMIZE
I/O. IF THE MEMORY UPPER LIMIT IS GREATER THAN THE MEMORY REQUIRED TO MINIMIZE I/O, THEN THE ACTUAL
MEMORY USAGE WILL BE CLOSE TO THE ESTIMATED "MEMORY TO MINIMIZE I/O" VALUE, AND THE SCRATCH DISK
USAGE WILL BE CLOSE-TO-ZERO; OTHERWISE, THE ACTUAL MEMORY USED WILL BE CLOSE TO THE PREVIOUSLY
MENTIONED MEMORY LIMIT, AND THE SCRATCH DISK USAGE WILL BE ROUGHLY PROPORTIONAL TO THE DIFFERENCE
BETWEEN THE ESTIMATED "MEMORY TO MINIMIZE I/O" AND THE MEMORY UPPER LIMIT. HOWEVER ACCURATE
ESTIMATE OF THE SCRATCH DISK SPACE IS NOT POSSIBLE.
(6) USING "*RESTART, WRITE" CAN GENERATE A LARGE AMOUNT OF DATA WRITTEN IN THE WORK DIRECTORY.


INCREMENT 1 SUMMARY


TIME INCREMENT COMPLETED 1.00 , FRACTION OF STEP COMPLETED 1.00
STEP TIME COMPLETED 1.00 , TOTAL TIME COMPLETED 1.00



J - I N T E G R A L E S T I M A T E S

CRACK CRACKFRONT C O N T O U R S
NUMBER NODE SET
1 2 3 4 5
6 7 8 9 10



1 XJ01 29.15 29.11 29.11 29.11 29.12
29.12 29.12 29.12 29.12 29.12





K F A C T O R E S T I M A T E S

CRACK CRACKFRONT C O N T O U R S
NUMBER NODE SET
1 2 3 4 5
6 7 8 9 10



2 XJ01 K1 : 2531. 2529. 2529. 2529. 2530.
K2: 0.000 0.000 0.000 0.000 0.000
MTS DIRECTION (DEG): 0.000 0.000 0.000 0.000 0.000
J from Ks: 29.15 29.11 29.11 29.11 29.12


K1: 2530. 2530. 2530. 2530. 2530.
K2: 0.000 0.000 0.000 0.000 0.000
MTS DIRECTION (DEG): 0.000 0.000 0.000 0.000 0.000
J from Ks: 29.12 29.12 29.12 29.12 29.12





T - S T R E S S E S T I M A T E S

CRACK CRACKFRONT C O N T O U R S
NUMBER NODE SET
1 2 3 4 5
6 7 8 9 10



3 XJ01 -254.2 -246.8 -246.6 -246.2 -245.7
-245.9 -245.9 -245.9 -245.9 -245.9



THE ANALYSIS HAS BEEN COMPLETED



ANALYSIS COMPLETE



JOB TIME SUMMARY
USER TIME (SEC) = 0.42000
SYSTEM TIME (SEC) = 8.00000E-02
TOTAL CPU TIME (SEC) = 0.50000
WALLCLOCK TIME (SEC) = 0
Sirius3
User
Beiträge: 18221
Registriert: Sonntag 21. Oktober 2012, 17:20

Und wo kommst Du jetzt mit Deinem Programm nicht weiter? Was hast Du schon?
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Das nachfolgende habe ich schon. Also die weitere Berechnung der Werte und dann das darstellen über Diagramme. Mir fehlt der erste Teil, wie man aus dem ganzen Text die entsprechende Werte ausliest und als Array in Python einliest.
Benutzeravatar
sparrow
User
Beiträge: 4506
Registriert: Freitag 17. April 2009, 10:28

Naja, es gibt keine magische Funktion, die dir das da heraus liest. Das musst du schon irgendwie selbs ttun.
Wir können auch gar nicht beurteilen, ob gewisse Dinge in der Datei sich ändern können - zum Beispiel die Stellen, die du rot gekennzeichnet hast.

Ich würde die Datei Zeile für Zeile durch gehen und nach Erkennungsmerkmalen suchen und denn entweder die entsprechende Zeile und ggf. die nächste Zeile auseinandernehmen (Zeichenketten Operationen) und dann in eine entsprechende Datenstruktur, die du brauchst, speichern.
nezzcarth
User
Beiträge: 1734
Registriert: Samstag 16. April 2011, 12:47

Das Format sieht nicht so aus, als wäre es für die maschinelle Weiterverarbeitung gedacht. Ich kenne ABAQUS nicht, aber es würde mich wundern, wenn es gerade bei einer professionellen Fachanwendung wieder dieser keine Möglichkeit gibt, die Ergebnisse in einem etwas gefälligeren Format zu speichern. Was du gezeigt hast, ist m. M. n. sehr umständlich und unschön zu verarbeiten. Ich würde wirklich mal in der Doku nachschauen, ob es da nicht eine Alternative gibt.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

ABAQUS hat laut Wikipedia auch eine Python Schnittstelle. Ggf ist das ein Weg.
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Okay. Ja gut, dann schaue ich mal, ob man die Ausgabe in anderen Form hinbekommt. Vllt als Tabelle. Trotzdem danke!

Grüße
Nino
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

sparrow hat geschrieben: Mittwoch 9. Dezember 2020, 10:03 Naja, es gibt keine magische Funktion, die dir das da heraus liest. Das musst du schon irgendwie selbs ttun.
Wir können auch gar nicht beurteilen, ob gewisse Dinge in der Datei sich ändern können - zum Beispiel die Stellen, die du rot gekennzeichnet hast.

Ich würde die Datei Zeile für Zeile durch gehen und nach Erkennungsmerkmalen suchen und denn entweder die entsprechende Zeile und ggf. die nächste Zeile auseinandernehmen (Zeichenketten Operationen) und dann in eine entsprechende Datenstruktur, die du brauchst, speichern.
So ich habe nochmal überlegt und bin auf eine nicht so schöne aber funktionierende Methode gekommen, um mir die entsprechenden Zeilen auslesen und in eine separate .txt Datei schreiben zu lassen. Der Dateiinhalt sieht jetzt folgendermaßen aus:

Code: Alles auswählen

    1      XJ01                 4.032           4.026           4.027           4.027           4.028    
                                4.028           4.028           4.028           4.028           4.028    
    2      XJ01         K1:       941.3           940.7           940.7           940.7           940.9    
                        K1:       940.9           940.9           940.9           940.9           940.9    
    3      XJ01                -63.76          -60.87          -60.78          -60.64          -60.47    
                               -60.52          -60.53          -60.53          -60.53          -60.53
Kannst du bzw. auch jemand anders mir dabei helfen, alles zu löschen, bis auf die Zahlenwerte? Also die Zahlen in der ersten Spalte(1,2,3), das XJ01 und das K1:. Damit es eine richtige Wertetabelle wird. Dazu finde ich leider keine passende Methode.
Sirius3
User
Beiträge: 18221
Registriert: Sonntag 21. Oktober 2012, 17:20

Zeilen aufzusplitten gehört zu den Grundlagen. Das wird in jedem Anfängertutorial erklärt.
nezzcarth
User
Beiträge: 1734
Registriert: Samstag 16. April 2011, 12:47

NinoBaumann hat geschrieben: Donnerstag 10. Dezember 2020, 09:27 Okay. Ja gut, dann schaue ich mal, ob man die Ausgabe in anderen Form hinbekommt. Vllt als Tabelle. Trotzdem danke!
Schau mal, ob das hilft:
https://abaqus-docs.mit.edu/2017/Englis ... ma-topic10

An sich könnte man die Daten übrigens problemlos mit grep oder awk in einer Zeile extrahieren. Unter anderem dadurch, dass offensichtlich zusammengehörige Daten aus scheinbar rein optischen Gründen auf mehrere Zeilen verteilt sind, wird das jedoch unnötig erschwert.
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

nezzcarth hat geschrieben: Donnerstag 10. Dezember 2020, 21:29
NinoBaumann hat geschrieben: Donnerstag 10. Dezember 2020, 09:27 Okay. Ja gut, dann schaue ich mal, ob man die Ausgabe in anderen Form hinbekommt. Vllt als Tabelle. Trotzdem danke!
Schau mal, ob das hilft:
https://abaqus-docs.mit.edu/2017/Englis ... ma-topic10

An sich könnte man die Daten übrigens problemlos mit grep oder awk in einer Zeile extrahieren. Unter anderem dadurch, dass offensichtlich zusammengehörige Daten aus scheinbar rein optischen Gründen auf mehrere Zeilen verteilt sind, wird das jedoch unnötig erschwert.
Hallo nezzcarth,

kannst du das mit grep und awk genauer erläutern? Davo habe ich noch nie etwas gehört.
Vielen Dank im Voraus.
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

nezzcarth hat geschrieben: Donnerstag 10. Dezember 2020, 21:29
NinoBaumann hat geschrieben: Donnerstag 10. Dezember 2020, 09:27 Okay. Ja gut, dann schaue ich mal, ob man die Ausgabe in anderen Form hinbekommt. Vllt als Tabelle. Trotzdem danke!
Schau mal, ob das hilft:
https://abaqus-docs.mit.edu/2017/Englis ... ma-topic10

An sich könnte man die Daten übrigens problemlos mit grep oder awk in einer Zeile extrahieren. Unter anderem dadurch, dass offensichtlich zusammengehörige Daten aus scheinbar rein optischen Gründen auf mehrere Zeilen verteilt sind, wird das jedoch unnötig erschwert.
Hallo nezzcarth,

kannst du das mit grep und awk genauer erläutern? Davo habe ich noch nie etwas gehört.
Vielen Dank im Voraus.
Benutzeravatar
__blackjack__
User
Beiträge: 13927
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das sind Standardwerkzeuge zur Verarbeitung von Textdaten unter unixoiden Systemen.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Okay, danke schonmal für die Antwort. Bist du auch der Meinung, dass darüber mein Problem gelöst werden kann?
nezzcarth
User
Beiträge: 1734
Registriert: Samstag 16. April 2011, 12:47

@NinoBaumann: Nimm Python. Die Erwähnung von awk/grep war als Argument gedacht, um zu verdeutlichen, dass das Format unzulänglich ist, weil es halt selbst mit solchen Werkzeugen, die eigentlich sehr gut für so was geeignet sind (insb. awk), nur umständlich klappt.
NinoBaumann
User
Beiträge: 80
Registriert: Samstag 25. April 2020, 19:03

Also ich habe das Problem jetzt mal für einen einfachen Fall gelöst. Also dass in dem dat file nur XJ01 berechnet wurde.

Code: Alles auswählen

                             J - I N T E G R A L   E S T I M A T E S

   CRACK   CRACKFRONT          C O N T O U R S
   NUMBER  NODE SET
                                1               2               3               4               5
                                6               7               8               9              10



     1      XJ01                 4.032           4.026           4.027           4.027           4.028    
                                 4.028           4.028           4.028           4.028           4.028    




                              K   F A C T O R       E S T I M A T E S

   CRACK   CRACKFRONT          C O N T O U R S
   NUMBER  NODE SET
                                      1               2               3               4               5
                                      6               7               8               9              10



     2      XJ01         K1:       941.3           940.7           940.7           940.7           940.9    
                         K2:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.032           4.026           4.027           4.026           4.028    


                         K1:       940.9           940.9           940.9           940.9           940.9    
                         K2:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.028           4.028           4.028           4.028           4.028    





                              T - S T R E S S   E S T I M A T E S

   CRACK   CRACKFRONT          C O N T O U R S
   NUMBER    NODE SET
                                1               2               3               4               5
                                6               7               8               9              10



     3      XJ01                -63.76          -60.87          -60.78          -60.64          -60.47    
                                -60.52          -60.53          -60.53          -60.53          -60.53    
Das Programm was ich geschreiben habe sieht folgendermaßen aus und arbeitet so:
-Ich muss per Hand die Zeilen eintragen, die ausgelesen werden sollen,
-dann werden diese Zeilen in einzelne Text Dateien geschrieben.
-danach werden diese Text Dateien über np.genfromtxt in Arrays geschrieben, wobei ich die usecols selber festlegen muss, da sie nicht für jede Zeile gleich sind.
-danach lösche ich die Text Dateien, weil ich die dann nicht mehr brauche.
-anschließgend verbinde ich mit np.append(a,b) jeweils zwei Arrays, da immer zwei Zeilen zusammengehören
-und zum Schluss schreibe ich die geordneten Werte in eine Text Datei.

Soweit so gut. Das Programm ist brutal hässlich, aber es läuft und würde mir soweit ausreichen für den einfachen Fall. Das Problem ist aber, dass ich später .dat Dateien auslesen muss die von XJ01 bis CJ99 gehen (Siehe Beispiel von XJ01 bis XJ09 unten) . Bei solchen großen Dateien müsste ich für data = f.readlines()[n] und für den nachfolgenden Code soooo viele Zeilen schreiben. Kann mir da irgendjemand helfen mit recht konkreten Antworten vllt mit wichtigen konkret formulierten Codezeilen?

Code: Alles auswählen

import numpy as np
import math
import os

with open("Rissmodell_mit_unterschiedlichen_Spannungsprofilen.dat") as f:
    data = f.readlines()[218]
with open("Rissmodell_mit_unterschiedlichen_Spannungsprofilen.dat") as f:
    data1 = f.readlines()[219]
with open("Rissmodell_mit_unterschiedlichen_Spannungsprofilen.dat") as f:
    data2 = f.readlines()[233]
with open("Rissmodell_mit_unterschiedlichen_Spannungsprofilen.dat") as f:
    data3 = f.readlines()[239]
with open("Rissmodell_mit_unterschiedlichen_Spannungsprofilen.dat") as f:
    data4 = f.readlines()[257]
with open("Rissmodell_mit_unterschiedlichen_Spannungsprofilen.dat") as f:
    data5 = f.readlines()[258]
   
datei = open('Zeile1.txt','w')
datei.write(data)
datei = open('Zeile2.txt','w')
datei.write(data1)
datei = open('Zeile3.txt','w')
datei.write(data2)
datei = open('Zeile4.txt','w')
datei.write(data3)
datei = open('Zeile5.txt','w')
datei.write(data4)
datei = open('Zeile6.txt','w')
datei.write(data5)
datei.close()

a = np.genfromtxt('Zeile1.txt', usecols=[2,3,4,5,6])
b = np.genfromtxt('Zeile2.txt', usecols=[0,1,2,3,4])
c = np.genfromtxt('Zeile3.txt', usecols=[3,4,5,6,7])
d = np.genfromtxt('Zeile4.txt', usecols=[1,2,3,4,5])
e = np.genfromtxt('Zeile5.txt', usecols=[2,3,4,5,6])
f = np.genfromtxt('Zeile6.txt', usecols=[0,1,2,3,4])

os.remove("Zeile1.txt")
os.remove("Zeile2.txt")
os.remove("Zeile3.txt")
os.remove("Zeile4.txt")
os.remove("Zeile5.txt")
os.remove("Zeile6.txt")

J = np.append(a,b)
K = np.append(c,d)
T = np.append(e,f)

Ausgabe = open('Ausgabedaten.txt','w')
Ausgabe.write('Con.\tJ\tSIF\tT-Stress\n')
for i in range(len(J)):
    Ausgabe.write('%i\t%.3e\t%.3e\t%.3e\n'%(i+1,J[i], K[i]/math.sqrt(1000), T[i]))

Ausgabe.close()

Code: Alles auswählen

                              J - I N T E G R A L   E S T I M A T E S

   CRACK   CRACKFRONT          C O N T O U R S
   NUMBER  NODE SET
                                1               2               3               4               5
                                6               7               8               9              10



     1      XJ01                 4.512           4.507           4.507           4.507           4.509    
                                 4.508           4.509           4.509           4.509           4.509    

     1      XJ02                 4.507           4.500           4.501           4.501           4.503    
                                 4.502           4.502           4.502           4.502           4.502    

     1      XJ03                 4.498           4.494           4.494           4.494           4.495    
                                 4.495           4.495           4.496           4.496           4.496    

     1      XJ04                 4.475           4.469           4.469           4.469           4.471    
                                 4.471           4.470           4.470           4.470           4.470    

     1      XJ05                 4.449           4.445           4.446           4.445           4.448    
                                 4.448           4.448           4.448           4.448           4.447    

     1      XJ06                 4.386           4.379           4.379           4.379           4.380    
                                 4.380           4.380           4.380           4.380           4.380    

     1      XJ07                 4.329           4.326           4.330           4.331           4.332    
                                 4.330           4.329           4.328           4.328           4.328    

     1      XJ08                 4.078           4.067           4.064           4.064           4.069    
                                 4.071           4.071           4.071           4.071           4.071    

     1      XJ09                 3.443           3.452           3.460           3.456           3.451    
                                 3.446           3.446           3.446           3.446           3.446    




                              K   F A C T O R       E S T I M A T E S

   CRACK   CRACKFRONT          C O N T O U R S
   NUMBER  NODE SET
                                      1               2               3               4               5
                                      6               7               8               9              10



     2      XJ01         K1:       995.8           995.2           995.3           995.3           995.5    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.512           4.507           4.507           4.507           4.509    


                         K1:       995.4           995.4           995.4           995.4           995.4    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.509           4.509           4.509           4.509           4.509    


     2      XJ02         K1:       995.3           994.5           994.6           994.5           994.8    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.507           4.500           4.501           4.501           4.503    


                         K1:       994.7           994.7           994.7           994.7           994.7    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.502           4.502           4.502           4.502           4.502    


     2      XJ03         K1:       994.3           993.8           993.8           993.8           994.0    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.498           4.493           4.494           4.494           4.496    


                         K1:       994.0           994.0           994.0           994.0           994.0    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.495           4.495           4.495           4.495           4.495    


     2      XJ04         K1:       991.8           991.0           991.1           991.0           991.3    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.475           4.468           4.469           4.469           4.471    


                         K1:       991.2           991.2           991.2           991.2           991.2    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.471           4.470           4.470           4.470           4.470    


     2      XJ05         K1:       988.9           988.4           988.5           988.5           988.7    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.450           4.445           4.446           4.446           4.448    


                         K1:       988.7           988.7           988.7           988.7           988.7    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.448           4.448           4.448           4.447           4.447    


     2      XJ06         K1:       981.8           981.0           981.0           981.0           981.2    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.386           4.378           4.379           4.378           4.380    


                         K1:       981.1           981.1           981.1           981.1           981.1    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.380           4.380           4.380           4.380           4.380    


     2      XJ07         K1:       975.8           975.1           975.0           975.0           975.2    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.332           4.326           4.326           4.325           4.327    


                         K1:       975.2           975.2           975.2           975.2           975.2    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.327           4.327           4.327           4.327           4.327    


     2      XJ08         K1:       946.3           945.7           945.9           945.9           946.1    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.074           4.069           4.071           4.071           4.072    


                         K1:       946.1           946.1           946.0           946.0           946.0    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    4.072           4.072           4.072           4.072           4.072    


     2      XJ09         K1:       870.1           869.3           869.1           868.9           869.2    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    3.445           3.439           3.436           3.435           3.437    


                         K1:       869.1           869.1           869.1           869.1           869.1    
                         K2:       0.000           0.000           0.000           0.000           0.000    
                         K3:       0.000           0.000           0.000           0.000           0.000    
         MTS   DIRECTION (DEG):    0.000           0.000           0.000           0.000           0.000    
                     J from Ks:    3.437           3.437           3.437           3.437           3.437    





                              T - S T R E S S   E S T I M A T E S

   CRACK   CRACKFRONT          C O N T O U R S
   NUMBER    NODE SET
                                1               2               3               4               5
                                6               7               8               9              10



     3      XJ01                -48.67          -50.87          -50.79          -50.64          -50.27    
                                -50.39          -50.39          -50.39          -50.39          -50.39    

     3      XJ02                -56.54          -50.88          -50.77          -50.63          -50.26    
                                -50.38          -50.38          -50.38          -50.38          -50.38    

     3      XJ03                -49.25          -51.18          -51.06          -50.92          -50.55    
                                -50.67          -50.67          -50.67          -50.67          -50.67    

     3      XJ04                -56.00          -50.65          -50.59          -50.43          -50.06    
                                -50.18          -50.18          -50.18          -50.18          -50.18    

     3      XJ05                -48.99          -51.63          -51.65          -51.50          -51.10    
                                -51.22          -51.22          -51.22          -51.22          -51.22    

     3      XJ06                -56.60          -50.32          -50.07          -49.95          -49.61    
                                -49.73          -49.73          -49.73          -49.73          -49.73    

     3      XJ07                -59.48          -58.52          -58.35          -58.23          -57.86    
                                -57.98          -57.98          -57.98          -57.98          -57.98    

     3      XJ08                -49.11          -47.85          -48.03          -47.86          -47.46    
                                -47.59          -47.59          -47.60          -47.60          -47.60    

     3      XJ09                -74.69          -69.49          -68.88          -68.80          -68.52    
                                -68.64          -68.63          -68.63          -68.62          -68.62    
nezzcarth
User
Beiträge: 1734
Registriert: Samstag 16. April 2011, 12:47

NinoBaumann hat geschrieben: Samstag 12. Dezember 2020, 10:41 Soweit so gut. Das Programm ist brutal hässlich, aber es läuft und würde mir soweit ausreichen für den einfachen Fall.
Schade, dass dich das nicht davon abhält, es weiter zu versuchen und stattdessen einen anderen Weg zu gehen (notfalls halt Kollegen fragen, wie die das machen). Um die Daten aus dem ersten Beispiel richtig sauber zu verarbeiten, musst du einen Parser implementieren. Alles andere wird auf Dauer nicht zuverlässig funktionieren. Das Format enthält auch einige Besonderheiten wie "NODE SET", die scheinbar eine Art Template für folgende Daten, darstellen. Wenn dein eigentliches Ziel ist, die Daten aus dem ersten Beispiel zu verarbeiten, bringt es auch nichts, auf dein Code-Beispiel einzugehen, weil es mit dem Ansatz kaum klappen wird.

Ansonsten: Lies die Daten wenigstens nur einmal ein, leg sie in einer Liste ab, und greif direkt auf sie zu:

Code: Alles auswählen

In [1]: with open("Rissmodell_mit_unterschiedlichen_Spannungsprofilen.dat") as f:
   ...:     data = [line.rstrip() for line in f]
   ...: 

In [2]: data[255]
Out[2]: '3 XJ01 -254.2 -246.8 -246.6 -246.2 -245.7'
Sirius3
User
Beiträge: 18221
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum liest Du die gesamte Datei 6 mal? Warum benutzt Du beim Lesen with, beim Schreiben aber nicht, wo es doch noch viel wichtiger wäre, die Dateien wieder ordentlich zu schließen, was Du nicht tust. Das Schreiben in eine Datei, nur um dann eine Zeile wieder in die Einzelteile zu zerlegen, ist reichlich umständlich. Und numpy zu benutzen ist hier auch mit Elefanten auf Katzen zu schießen.

Code: Alles auswählen

LINE_NUMBERS = [218, 219, 233, 239, 257, 258]

with open("Rissmodell_mit_unterschiedlichen_Spannungsprofilen.dat") as f:
    lines = f.readlines()

numbers = [
    lines[line_number].split()[-5:]
    for line_number in LINE_NUMBERS
]
matrix = zip(
    numbers[0] + numbers[1],
    numbers[2] + numbers[3],
    numbers[4] + numbers[5]
)
with open('Ausgabedaten.txt','w') as output:
    output.write('Con.\tJ\tSIF\tT-Stress\n')
    for index, (j,sif,t_stress) in enumerate(matrix):
        output.write(f'{index}\t{j}\t{float(sif)/1000**0.5:.3f}\t{t_stress}\n')
Antworten