Einzeiler zum fürchten
Verfasst: Sa Dez 29, 2012 9:03 am
Also manchmal mach ich mir selber Angst...
wat?
Erste Zeile: verwandle eine Liste von Dateinamen in eine Liste von offenenen Dateideskriptoren
Zweite Zeile: Generiere aus jeder Datei in der Liste der Dateideskriptoren einen Iterator mit den geparsten Einträgen dieser Datei, speichere diesen in eine Liste ab, entpacke die liste und erzeuge einen "zusammengehängten" Iterator mit den Einträgen aller Dateien
3-4 Zeile: Füttere den Iterator mit den Einträgen in meine Funktion.
# Man beachte: bis jetzt wurde erstmal *gar nix* gelesen. Meine Funktion kann sich jetzt einen Eintrag nach dem anderen in den Speicher ziehen und abarbeiten.
5-7 Zeile: Mach alle Filedeskriptoren zu
Sowas geht auch nur in Python ^^
Aber ich mag das. In der Kürze liegt die Würze.
ps.: Na gut, vielleicht würde man das mit C++11/Lambdas/IOStream auch irgendwie hinkriegen.
Code: Alles auswählen
# open files
infile_fds = [open(infile, 'r') for infile in infilenames]
# Stick all SeqIO iterators together to form one long chain
record_iter = itertools.chain(*[SeqIO.parse(infile, "fasta") for infile in infile_fds])
try:
results = run_finders(record_iter)
finally:
for f in infile_fds:
f.close()

Erste Zeile: verwandle eine Liste von Dateinamen in eine Liste von offenenen Dateideskriptoren
Zweite Zeile: Generiere aus jeder Datei in der Liste der Dateideskriptoren einen Iterator mit den geparsten Einträgen dieser Datei, speichere diesen in eine Liste ab, entpacke die liste und erzeuge einen "zusammengehängten" Iterator mit den Einträgen aller Dateien

3-4 Zeile: Füttere den Iterator mit den Einträgen in meine Funktion.
# Man beachte: bis jetzt wurde erstmal *gar nix* gelesen. Meine Funktion kann sich jetzt einen Eintrag nach dem anderen in den Speicher ziehen und abarbeiten.
5-7 Zeile: Mach alle Filedeskriptoren zu
Sowas geht auch nur in Python ^^
Aber ich mag das. In der Kürze liegt die Würze.
ps.: Na gut, vielleicht würde man das mit C++11/Lambdas/IOStream auch irgendwie hinkriegen.