Seite 1 von 1

Datei auslesen und in Dict umwandeln

Verfasst: Samstag 30. Januar 2010, 11:28
von hoopy
Hi Ihr.
Ich bin Python-Anfänger und komme einfach nicht weiter. Ich hoffe ihr könnt mir weiterhelfen.

Folgende Situation:
Ich habe eine Datei, die so aufgebaut ist:

|key1 ....
value über mehrere Zeilen
|key2 ....
value über mehrere Zeilen

Die Datei ist also so aufgebaut das hinter | der Key steht mit weiteren Einträgen dahinter, die nicht als Key fungieren. In den folgenden Zeilen ist der zugehörige Value.
Key und Value sollen in ein dict organisiert werden.
Mein bisheriger Code:

Code: Alles auswählen

f = open("test")
dict={}
s=""
for line in f:
    line = line.split(" ")
    if "|" in line:
          dict[line[0]] = s
    else:
          s+= line ???

Mein Problem ist, wie ich über die folgenden Zeilen iteriere bis zur nächsten Markierung.

Viele Grüße und Danke im Voraus.

Verfasst: Samstag 30. Januar 2010, 11:50
von sma

Code: Alles auswählen

import re

def load(n):
	d = {}
	k = None
	with open(n) as f:
		for line in f:
			m = re.match(r"\|(\w+)", line)
			if m:
				k = m.group(1)
				d[k] = ""
			elif k:
				d[k] += line
	return d
Stefan

Verfasst: Samstag 30. Januar 2010, 12:45
von hoopy
Funktioniert super. Danke.

Re: Datei auslesen und in Dict umwandeln

Verfasst: Donnerstag 13. Mai 2010, 10:29
von mathgirl
Hallo Ihr,

ich habe leider keine Erfahrung mit Programmierung und muss ein ähnliches Problem lösen. Die Datei, die ich vor mir liegen habe, ist auch so aufgebaut. Ich muss aber die Datei ohne "def" auslesen und in dict speichern. Ich habe leider keine Ahnung wie das geht.

Könnte mir vielleicht jemand zeigen, wie das ohne "def" geht? Ich wäre euch echt dankbar.

Liebe Grüße

Re: Datei auslesen und in Dict umwandeln

Verfasst: Donnerstag 13. Mai 2010, 10:52
von sma
Aus dem "muss aber die Datei ohne def auslösen" schließe ich mal, dass das eine Schulaufgabe ist, wo die Lehrkraft wünscht, dass keine Funktionen benutzt werden. Da dies so ziemlich das erste sein dürfte, was man lernt -- jedenfalls vor regulären Ausdrücken und IMHO auch Dateioperationen -- kann das mit so begrenztem Wissen schwierig werden. Und "keine Erfahrung mit Programmierung" hilft da auch nicht wirklich weiter ;)

Mein Tipp: Lernen.

Es gibt ein gutes deutsches Tutorial zu Python und wie man die Funktionsdefinition aus meinem Beispiel entfernt, sollte man sich dann in 2 Minuten zusammenreimen können. Nur wie gesagt, wäre ich Lehrer und würde mich an einem "def" stören, dann wäre "import re" ebenso ein no-go.

Stefan

Re: Datei auslesen und in Dict umwandeln

Verfasst: Donnerstag 13. Mai 2010, 10:56
von BlackJack
@mathgirl: Warum musst Du das ohne eine Funktion machen?

@sma: Das `re` sollte doch auch durch ein `str.startswith()` ersetzbar sein, oder? Zumindest wenn ich die Problembeschreibung richtig verstanden habe.

Re: Datei auslesen und in Dict umwandeln

Verfasst: Donnerstag 13. Mai 2010, 11:09
von sma
BlackJack hat geschrieben:@sma: Das `re` sollte doch auch durch ein `str.startswith()` ersetzbar sein, oder? Zumindest wenn ich die Problembeschreibung richtig verstanden habe.
Natürlich gibt es diverse Möglichkeiten. Ich meinte ja nur, selbst wenn man bei meinem Beispiel einfach das "def" entfernt -- was so simpel sein sollte, dass ich keine Notwendigkeit sehe, da weiter darauf einzugehen, müsste man meine Lösung noch ändern, damit da keine regulären Ausdrücke benutzt werden.

Stefan

Re: Datei auslesen und in Dict umwandeln

Verfasst: Donnerstag 13. Mai 2010, 11:27
von Defnull
mathgirl hat geschrieben:Hallo Ihr,

ich habe leider keine Erfahrung mit Programmierung und muss ein ähnliches Problem lösen. Die Datei, die ich vor mir liegen habe, ist auch so aufgebaut. Ich muss aber die Datei ohne "def" auslesen und in dict speichern. Ich habe leider keine Ahnung wie das geht.

Könnte mir vielleicht jemand zeigen, wie das ohne "def" geht? Ich wäre euch echt dankbar.

Liebe Grüße
Kannst du nicht von hoopy abschreiben, wenn ihr schon die gleiche Hausaufgabe macht?

Re: Datei auslesen und in Dict umwandeln

Verfasst: Donnerstag 13. Mai 2010, 12:02
von BlackJack
@Defnull: Nee, hoopy hat ja das mit dem ``def`` abgeschrieben. ;-)

Re: Datei auslesen und in Dict umwandeln

Verfasst: Donnerstag 13. Mai 2010, 12:38
von Hyperion
Defnull hat geschrieben: Kannst du nicht von hoopy abschreiben, wenn ihr schon die gleiche Hausaufgabe macht?
Naja, wäre zeitlich auch ziemlich versetzt ;-)

Ich würde ja mal (wie immer) fragen, ob die Eingabedaten denn wirklich in der Form vorliegen müssen, oder ob man die nicht auch ändern könnte? Wenn ja, gibt es sicherlich bessere Formate (JSON, XML, INI), die man dafür nehmen könnte.

Ich erinnere mich noch immer mit Grausen an diesen Thread... insofern immer erst mal das Eingabeformat anzweifeln! *, **


*: Außer man heißt sma und hat Spaß am Schreiben von Parsern :mrgreen: SCNR
**: Aber dafür ist das Format ja eigentlich zu belanglos ;-)

Re: Datei auslesen und in Dict umwandeln

Verfasst: Donnerstag 13. Mai 2010, 17:34
von sma
Hyperion hat geschrieben:*: Außer man heißt sma und hat Spaß am Schreiben von Parsern
Wie heißt es so schön? Wenn man einen guten Hammer hat, sieht alles wie ein Nagel aus :)

Stefan