[Python-de] ASCII file lesen

Achim Domma (Procoders) domma at procoders.net
Die Jan 20 14:39:49 CET 2004


Hallo,

> mein Vorschlag wäre folgender (das Modul 'string' würde ich nicht
> benutzen und statt map eben die List comprehensions empfehlen. Auch
> open(...) würde ich durch file(...) ersetzen):
>
> fp = file('nums.txt','r')
> lines = fp.readlines()
> fp.close()
>
> lines_of_nums=[]
> for line in lines:
> 	lines_of_nums.append([float(x) for x in line.split(',')])

also wenn der Code schon einfach und übersichtlich sein soll, dann kann man
(zumindest mit Python 2.3) auch folgendes schreiben:

print [
    [float(x) for x in line.split(',')]
    for line in file('data.txt')
    ]

Bei mir liefert das:

[[47408983.0, 9620543.0, 441.35742199999999], [47408983.0, 9620543.0,
441.44334800000001]]

Das 'r' bei file ist unnötig, weil es der Defaultwert ist. Einlesen der
Zeilen mit readlines muß auch nicht sein, da file einen Interator
zurückliefert. Bei großen Files müßte das sogar deutlich performanter sein,
da das File nicht ganz in den Speicher geladen wird. Und die Schreibweise
mit doppelter Listkomprehension ist zumindest für mich am besten zu lesen,
zumal keine temporären Variablen verwendet werden.

Gruß,
Achim