Ich hatte mal ein bisschen mit Generatoren experimentiert. Ich wollte etwas wie eine Eierlegende Wollmilchsau.
http://pastebin.com/bra6GUxH
Code: Alles auswählen
# This could be improved.
def chunker(iterable, num):
"""
Returns an generator which yields the available chunks.
If the last chunk is incomplete, it'll be cut off.
"""
iterator = iter(iterable)
while iterator:
ret = []
for _ in range(num):
try:
ret.append(next(iterator))
except StopIteration:
return
else:
yield ret
Hier ein Beispiel:
Code: Alles auswählen
s = 'Line 1\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6'
ret = {}
for k, v, in chunker(s.splitlines(), 2): #splitlines ist hier wichtig
ret.update({k.strip(): v.strip()})
# {'Line 1': 'Line 2', 'Line 3': 'Line 4', 'Line 5': 'Line 6'}
Mit Dateien: example.txt
Code: Alles auswählen
with open('example.txt') as fd:
ret = {}
for k, v in chunker(fd, 2):
ret.update({k.strip(): v.strip()})
# ret: {'Bar': '43', 'BarFoo': '55', 'Foo': '42', 'FooBar': '45'}
Missing!!!!!! taucht nicht auf, da danach StopIteration ausgelöst wird, obwohl die Anzahl der Elemente noch nicht erreicht ist.
Je nach Anforderung kann es aber auch gut sein, wenn man eine Exception auslöst. Kommt halt drauf an wie sauber die Daten sind, die rein kommen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server