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
Werte aus einer .dat Datei (aus ABAQUS Berechnung) in Python einlesen
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.
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.
-
- 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
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
-
- 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.
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.
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.
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.
-
- 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
Grüße
Nino
-
- User
- Beiträge: 80
- Registriert: Samstag 25. April 2020, 19:03
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: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.
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
Schau mal, ob das hilft: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!
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.
-
- User
- Beiträge: 80
- Registriert: Samstag 25. April 2020, 19:03
Hallo nezzcarth,nezzcarth hat geschrieben: ↑Donnerstag 10. Dezember 2020, 21:29Schau mal, ob das hilft: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!
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.
kannst du das mit grep und awk genauer erläutern? Davo habe ich noch nie etwas gehört.
Vielen Dank im Voraus.
-
- User
- Beiträge: 80
- Registriert: Samstag 25. April 2020, 19:03
Hallo nezzcarth,nezzcarth hat geschrieben: ↑Donnerstag 10. Dezember 2020, 21:29Schau mal, ob das hilft: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!
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.
kannst du das mit grep und awk genauer erläutern? Davo habe ich noch nie etwas gehört.
Vielen Dank im Voraus.
- __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
— Scott Bellware
-
- 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?
@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.
-
- 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.
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
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
-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
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.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.
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'
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')