Seite 1 von 1
Daten aus einer Datei auslesen und Formatieren
Verfasst: Montag 7. Dezember 2009, 21:33
von eiton
Hallo
ich hab eine Datei mit zB folgendem Inhalt:
Max Mustermann, 0179 123456789, 17.03.1980
Toni Test, 0150 123456789, 21.11.1985
Monika Musterfrau, 0151 123456789, 22.10.1980
Jetzt möchte diese Daten auslesen und und nach Geburtsjahr sortiert in ein Dictionary mit einer Liste von Tupeln schreiben.
ZB:
{'1980':[(Mustermann, Max),(Musterfrau, Monika)]}
{'1985':[(Test, Toni)]}
Bisher hab ich das so Versucht (bin nicht weit

)
Also will erstmal nur eine Liste mit vernünftiger Formatierung erstellen, also Schritt für Schritt rantasten.
Code: Alles auswählen
import re
pfad = "D:/pythprogs/files/"
dateiname = "daten.txt"
datei = pfad+dateiname
in_file = open(datei,"r")
text = in_file.read().split(','+'')
in_file.close()
list = []
dict = {}
for line in text:
line = line.strip()
line = line.split("\n")
list.append(line)
print list
Leider kommt sowas bei raus...
[['Max Mustermann'], ['0179 123456789'], ['17.03.1980', Toni Test'], ['0150 123456789'], ['21.11.1985', Monika Musterfrau'], [0151 123456789'], ['22.10.1980']]
Wenn ich readline schreibe, dann wird das ganze wunderbar Formatiert, aber eben nur eine Zeile...
Wäre über paar Tipps dankbar wie ich meine Liste vernünftig ausgeben könnte und evtl. wie ich das Gesamtproblem besser angehen könnte.
mfg eiton
Verfasst: Montag 7. Dezember 2009, 21:45
von BlackJack
@eiton: Falls Du das Tutorial in der Python-Dokumentation noch nicht durchgearbeitet hast, solltest Du das nachholen.
Du teilst den Inhalt der gesamten Datei an Kommas auf. Und nennst dann die erhaltenen Teile `line`. Das ist ja schonmal falsch, denn `text` enthält keine einzelnen Zeilen.
Zeilenweise verarbeiten ist aber schon mal eine gute Idee.
Re: Daten aus einer Datei auslesen und Formatieren
Verfasst: Montag 7. Dezember 2009, 22:16
von /me
Ergänzend zu BlackJack möchte ich schon mal einen ersten Ansatz liefern damit du nicht zu lange im Nebel stocherst:
Code: Alles auswählen
with open(filename, "r") as f_in:
for line in f_in:
print(line)
Eine weitere Anmerkung zu deinem Code ist allerdings auch noch dringend erforderlich. Du solltest Schlüsselwörter nur dann überschreiben wenn dir erstens klar ist was du da tust und wenn es zweitens wirklich unbedingt vonnöten ist.
dict und
list sind zwei äußerst ungünstig gewählte Variablennamen.
Zum Schluss noch eine Frage: Was soll das
','+'' in der Zeile
eigentlich darstellen?
Verfasst: Montag 7. Dezember 2009, 22:34
von eiton
Danke für die schnelle Antworten.
@BlackJack nein das Tutorial hab ich nicht gemacht. Hatte das hier eigentlich überwiegend benutzt.
http://openbook.galileocomputing.de/pyt ... x.htm#_top
@/me
OK wird ich mal austesten und deinen Rat beherzigen.
Das ','+'' sollte anfangs beim ',' und beim Leerzeichen spliten, das hatte allerdings irgendwie nicht Funktioniert und ist eigentlich nur ein Überbleibsel von meinem "herumgespiele".
Danke nochmal euch beiden. Für weitere Tipps bin ich immer offen

Verfasst: Montag 7. Dezember 2009, 22:37
von jbs
Warum kommen alle Leute immer aufs OpenBook?
Wieso finden die keine vernünftige Alternative.
Edit:
so?
Code: Alles auswählen
from collections import defaultdict
def sorted_iteritems(d):
for k in sorted(d.keys()):
yield k, d[k]
s='''Max Mustermann, 0179 123456789, 17.03.1980
Toni Test, 0150 123456789, 21.11.1985
Monika Musterfrau, 0151 123456789, 22.10.1980'''
d = defaultdict(list)
for line in s.split('\n'):
name, tel, birthdate = [s.strip() for s in line.split(',')]
fname, sname = name.split()
d[int(birthdate.rsplit('.',1)[-1])].append((sname,fname))
for k, v in sorted_iteritems(d):
print k, v
Verfasst: Montag 7. Dezember 2009, 23:16
von eiton
Danke für den kompletten Code, blick da noch nicht ganz so durch, die meisten Sachen sind mir auch bisher fremd. Jedenfalls sagt der beim starten:
d = defaultdict(list)
TypeError: first argument must be callable
mit google hab ich da jetzt nicht soviel gefunden nur das dieser Fehler wohl bei defaultdict passiert...
Wegen OpenBook, kannst du mir bitte eine vernünftige Alternative nennen, für den Anfang sah das die OpenBook ganz schick aus.
mfg
Verfasst: Montag 7. Dezember 2009, 23:20
von cofi
Immernoch das Tutorial:
http://docs.python.org/tutorial/
Kann das Verhalten in Python 2.6 uebrigens nich nachvollziehen:
Code: Alles auswählen
>>> import collections
>>> d = collections.defaultdict(list)
>>> d
defaultdict(<type 'list'>, {})
Verfasst: Montag 7. Dezember 2009, 23:21
von jbs
Verfasst: Montag 7. Dezember 2009, 23:23
von cofi
jbs hat geschrieben:Hast du list überschrieben?
Und sogar `dict`

Strike.
Verfasst: Montag 7. Dezember 2009, 23:29
von jbs
Ich hab mal `python openbook` gegoogelt. Und BlackJacks Meinung ist sogar schon auf der ersten Seite vertreten. Da habe ich entdeckt, dass google eine aufwert-Funktion hat. Die habe ich dann auch gleich mal ausprobiert

.
Verfasst: Dienstag 8. Dezember 2009, 03:25
von BlackJack
@jbs: Juhuu, dann scheint mein Geheimplan diesen Verlag zu vernichten, langsam Fahrt aufzunehmen.

Verfasst: Dienstag 8. Dezember 2009, 08:59
von snafu
Inzwischen schon 3...

Re: Daten aus einer Datei auslesen und Formatieren
Verfasst: Dienstag 8. Dezember 2009, 13:53
von Hyperion
eiton hat geschrieben:Hallo
ich hab eine Datei mit zB folgendem Inhalt:
Max Mustermann, 0179 123456789, 17.03.1980
Toni Test, 0150 123456789, 21.11.1985
Monika Musterfrau, 0151 123456789, 22.10.1980
Darf man fragen, wo die herkommt? Ist die selber so angelegt? Kann man das Format ggf. noch ändern?
Imho sollte man bei Anfängern diese Frage auf jeden Fall stellen! Denn eigene Formate "erfinden" ist imho oftmals Resultat der Unkenntnis besserer Alternativen.
Verfasst: Dienstag 8. Dezember 2009, 16:25
von b.esser-wisser
Kann das csv-Modul diese Dateien nicht verarbeiten ? (ggf mit ", ", d.h. <komma><leerzeichen> als Trennzeichen)
hth, Jörg