Seite 1 von 1

Textdatei einlesen, auswerten und als tuple/dict abspeichern

Verfasst: Mittwoch 9. Januar 2008, 22:02
von calo
Hallo,

Ich stehe wieder mal auf dem Schlauch und komme deshalb nicht weiter. Ich möchte eine Textdatei einlesen und darin die ganzen Elemente scannen und als als eine Kombination von tuple/dict wieder abspeichern.

Die Datei könnte dabei folgendermaßen aussehen:
**
** elements.inp
**
*Element, elset=set1, Type=CPS3
1, 214, 104, 213
2, 126, 125, 19
3, 203, 127, 128
4, 128, 127, 31
5, 233, 200, 199
*Element, elset=set2, type=CPS4
6, 234, 86, 85, 23
7, 233, 156, 129, 85
8, 191, 78, 77, 34
9, 131, 130, 41, 3
10, 164, 163, 46, 923
**
Das Ergebnis sollte dann so aussehen:

Code: Alles auswählen

#
# meshfile.py
#
elements = ((CPS3, 
{ 1: (214, 104, 213),
2: (126, 125, 19),
3: (203, 127, 128),
4: (128, 127, 31),
5: (233, 200, 199)}),
(CPS4, {6: (234, 86, 85, 23),
7: (233, 156, 129, 85),
8: (191, 78, 77, 34),
9: (131, 130, 41, 3),
10: (164, 163, 46, 923)}), )
Für einen einzelnen Elementblock funktioniert mein Skript soweit. Aber wenn es mehrere sind stimmt das Ergebnis nicht mehr.

Code: Alles auswählen

deck_file = file("elements.inp", "r")
deck_lines = deck_file.readlines()
deck_file.close()
output_file = file("meshfile.py", "w")

output_file.write("}\n\nelements = (")
inline = False
elementlines = []
for line in deck_lines:
	if '*element,' in line.lower():
		element_type_ = line.strip().split(",")
		for t in element_type_:
			if "type" in t.lower():
				element_type = t.split("=")[-1]
		inline = True
	elif inline == True and '*' not in line:
		elementlines.append(line.strip())
	elif inline == True and '*' in line:
		inline = False
		label_list = []
		node_list = []
		for line in elementlines:
			tokens = line.strip().split(",")
			line_values = tuple(map(int, tokens))
			label_list.append(line_values[0])
			node_list.append( line_values[1:] )

		elements = dict(zip(label_list, node_list))
		output_file.write("(%s, { " % element_type)
		for line in elements.keys():
			output_file.write(str(line)+": "+str(elements[line])+",\n\t\t")
		output_file.write("}), ")

output_file.write(")")
output_file.close()
Vieleicht seht ihr mein Fehler.

Vielen Dank, Calo

[gelöst] Textdatei einlesen und auswerten

Verfasst: Samstag 12. Januar 2008, 13:42
von calo
Hallo,

hartes stück arbeit. Aber ich habe es doch noch selber geschafft. Ich werde aber den Eindruck nicht los, dass ich viel zu kompliziert gedacht habe. Hier meine Lösung: http://paste.pocoo.org/show/20853/

Weiterhin ein etwas größeres Inputdeck (ABAQUS FEM-Quellcode, http://de.wikipedia.org/wiki/Finite-Elemente-Methode), an das man mein Skript testen kann: http://paste.pocoo.org/show/20854/

Gibt es da einfachere Methoden Text-Dateien in spezielen Formaten, insbesondere FEM-Quellcodes (diese sind in der Regel ASCII-Dateien) zu analysieren und in einem selbstgestricken Python-Objekt abzulegen um es zu einem späteren Zeitpunkt weiter zu verarbeiten?

Grüße, Calo

Verfasst: Samstag 12. Januar 2008, 15:53
von BlackJack
So schlecht sieht's doch gar nicht aus wenn man mal davon absieht, das mit globalen Listen gearbeitet wird.