Ok, der Titel sagt nicht alles, sonst wäre es wohl etwas einfacher.
Folgendes Problem kann ich einfach nicht lösen, wobei die passende txt
datei so aussieht:
Dateiname1.xxx
DateipfadzuDatei1
Dateiname2.xxx
DateipfadzuDatei2
..
So, nun schaffe ich es einfach nicht, dieses in ein Dictionary zu bekommen.
Das dic sollte möglichst so aussehen:
dic = {'dateiname1.xxx':'dateipfadzuDatei1', 'dateiname2':'dateipfadzuDatei2' }
da ich es danach auslesen möchte, braucht es dieses format. kann mir einer weiterhelfen und nen tip geben?
mfg prosta
zeile für zeile in dic
Hi. Wo liegt das Problem?
Code: Alles auswählen
f=file("dateiname","U")
lineiter=iter(f)
d={}
while True:
try:
d[lineiter.next().replace("\n","")]=lineiter.next().replace("\n","")
except StopIteration:
break
f.close()
Zuletzt geändert von Milan am Freitag 22. Oktober 2004, 17:57, insgesamt 1-mal geändert.
-
- User
- Beiträge: 128
- Registriert: Freitag 22. Oktober 2004, 09:22
- Wohnort: Salzgitter
- Kontaktdaten:
Moinsen...
Code: Alles auswählen
data = readlines()
t = {}
for i in range(len(data)):
if((i + 1) % 2 != 0):
t[data[i]] = data[(i + 1)]
Hi. Wenn man schon alles in den Speicher laden will... du musst noch die Zeilenumsprünge abtrennen und statt range würde ich lieber (wieder aus Speicher, vor allem aber Geschwindigkeitsgründen) xrange nehmen und die Schrittweite auf 2 setzen. Dann spaarst du das if und bist noch ein klein wenig schneller.Redprince hat geschrieben:Moinsen...Code: Alles auswählen
data = readlines() t = {} for i in range(len(data)): if((i + 1) % 2 != 0): t[data[i]] = data[(i + 1)]
mfg Milan
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi pr0stAta,
Du könntest auch einen eigenen Iterator für Paare aus einem Iterable machen:
Gruß
Dookie
Du könntest auch einen eigenen Iterator für Paare aus einem Iterable machen:
Code: Alles auswählen
import string
def pairs(iterable, fa=lambda a: a, fb=lambda b: b):
""" fa and fb are optional functions to modify the items of the pairs """
it = iter(iterable)
while True:
yield fa(it.next()), fb(it.next())
f = file("datei.txt", "r")
data = dict(pairs(f, string.rstrip, string.rstrip))
f.close()
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
erstmal danke an alle 
die verständlichste für mich war redprince version, aber da fehlte
ja nen teil wie milan schon schrieb.
dookies, deins is mir irgendwie zu hoch :>
ich belasse es also bei milans vorschlag

die verständlichste für mich war redprince version, aber da fehlte
ja nen teil wie milan schon schrieb.
dookies, deins is mir irgendwie zu hoch :>
ich belasse es also bei milans vorschlag
Hi, ist das ein Grund etwas nicht einzusetzen, weil man es nicht versteht? dafür ist doch das Forum hier da, um sich was erklären zu lassen. Also mal ausgegangen von Redprince seiner Variante (verbessert):
Nun Dookie seine Variante:
Die for Schleife ist in Dookies Fall durch das dict ersetzt, nur zum Vergleich... wo ist der Unterschied? Oben wird alles gleich auf einmal geladen, mittels readlines in eine Liste. Hier geht Dookie genauso vor wie ich, nur dass er es in einer Funktion machen lässt - es werden immer paarweise zwei Zeilen ausgelesen und der Zeilenumsprung abgetrennt. Das ganze nennt sich Iterator (das pairs(...)) und kann so einfach die for Schleife passieren. Verständlicher?
mfg Milan
Code: Alles auswählen
f = file("datei.txt", "r")
data = f.readlines()
f.close()
t = {}
for i in xrange(0,len(data),2):
t[data[i].rstrip()] = data[(i + 1)].rstrip()
#ich mag kein rstrip - könnte Leerzeichen am Zeilenende entfehrnen, aber Dookie nutzt es
Code: Alles auswählen
def pairs(iterable, fa=lambda a: a, fb=lambda b: b):
it = iter(iterable)
while True:
yield fa(it.next()), fb(it.next())
f = file("datei.txt", "r")
t={}
for key,value in pairs(f, str.rstrip, str.rstrip):
t[key]=t[value]
f.close()
mfg Milan
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi milan,
du kannst auch *.rstrip("\r\n") verwenden, so werden nur Zeilenumbrüche am Zeilenende entfernt.
Der generator pairs stammt aus einem Programm von mir, ist einfach universell zu verwenden, um Listen und ähnliches paarweise Auszulesen.
Gruß
Dookie
du kannst auch *.rstrip("\r\n") verwenden, so werden nur Zeilenumbrüche am Zeilenende entfernt.
Der generator pairs stammt aus einem Programm von mir, ist einfach universell zu verwenden, um Listen und ähnliches paarweise Auszulesen.
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
jo danke für die erklärung nu isses für mich verständlich :>
ich verstehe und zur not jmd anders erklären könnte. wenn ich code einsetze den ich selber nicht verstehe, passt das meiner meinung nach irgendwie
nicht :>
meiner meinung - ja , denn ich möchte ja ein programm haben wasHi, ist das ein Grund etwas nicht einzusetzen, weil man es nicht versteht?
ich verstehe und zur not jmd anders erklären könnte. wenn ich code einsetze den ich selber nicht verstehe, passt das meiner meinung nach irgendwie
nicht :>