Seite 1 von 1

datei einlesen

Verfasst: Dienstag 18. Mai 2004, 15:31
von morpheus0023
hallo,

habe folgende .txt datei zum einlesen:

Bernd 5 3
Susi 4.50 0
Rudi 4.85 6
Katy 5.15 5
Markus 5 8

das hab ich dann so gemacht:

f=open("eingabe.txt","r")
print f.readlines()

ausgegeben wird mir eine liste, dass ja schonmal gut. nur hab ich nach jedem zeilenumbruch diese \n dingens drin. wie bekomm ich die am besten raus? oder gibt es eine andere möglichkeit die datei als liste einzulesen?

ps. bin anfänger

gruß
morpheus

Verfasst: Dienstag 18. Mai 2004, 16:17
von Gast
Probiers mal so:

Code: Alles auswählen

file = open("D:/test.txt", "r") # Oeffnen der Datei

liste = []                      # Anlegen der leeren Liste

for line in file:               # Durchlauf durch die Zeilen der Datei
    liste.append(line[:-1])     # Hinzufuegen zur Liste und vorheriges
                                # Abschneiden des letzten Zeichens
                                # einer Zeile

print liste                     # Ausgabe der Liste  

file.close()                    # Schliessen der Datei
Das ergibt dann bei deiner Datei folgende Ausgabe:

Code: Alles auswählen

['Bernd 5 3', 'Susi 4.50 0', 'Rudi 4.85 6', 'Katy 5.15 5', 'Markus 5 8']
Erreicht wird das, weil durch das "line[:-1]" immer das letzte Zeichen der Zeile abgeschnitten wird.

Zur Indizierung bei Strings kann dir diese Seite vielleicht weiterhelfen:

http://starship.python.net/crew/gherman ... node5.html

Das wars auch schon ;-)

Verfasst: Dienstag 18. Mai 2004, 16:31
von Dookie
Hi Gast,

und was machst Du wenn die Datei von einem Mac kommt? Da sind die Zeilenumbrüche "\r\n" also 2 Zeichen. Und was ist, wenn bei der letzten Zeile kein Zeilenumbruch ist?

Folgenes Beispiel löscht alle "Whitespaces" am Ende jeder Zeile, also auch Zeilenumbrüche

Code: Alles auswählen

f = file("test.txt", "r")              # Datei öffnen
liste = [line.rstrip() for line in f]  # 'Whitespaces' am Ende jeder Zeile löschen
f.close()                              # Datei schließen
print liste                            #liste ausgeben
Gruß

Dookie

Verfasst: Dienstag 18. Mai 2004, 16:57
von morpheus0023
beides interesannt lösungen, wäre ich nie drauf gekommen.
also der zeilenumbruch verschwindet bei beiden lösungen.
nur die tabs (\t) nicht.

bsp.: bernd \t5\t3

gibt es nicht für sowas eine methode wies in python für fast alles ne funktion gibt?

also wenn kein string (bsp. bernd) in der datei wäre, und pro zeile nur eine zahl stünde, könnte man es auch so machen:

map(int,file("test.txt"))

sonst noch irgend ne idee?

Verfasst: Dienstag 18. Mai 2004, 17:15
von Dookie
Hi morpheus,

wenn in deinem Beispiel die \t einfach wegfallen wird daraus 53. Wenn das nicht gewollt ist kannst Du die \t auch z.B. durch Leerzeichen ersetzen lassen

Code: Alles auswählen

f = file("test.txt", "r")              # Datei öffnen
# 'Whitespaces' am Ende jeder Zeile löschen und Tabs durch Spaces ersetzen
liste = [line.replace(line.rstrip().replace('\t', ' ') for line in f]
f.close()                              # Datei schließen
print liste                            #liste ausgeben
Gruß

Dookie

Verfasst: Dienstag 18. Mai 2004, 17:56
von Dookie
Falls Du die einzelnen Daten in den Zeilen weiterverarbeiten willst, gehts auch so:

Code: Alles auswählen

f = file("test.txt", "r")              # Datei öffnen
liste = [line.split() for line in f if line.strip()]
f.close()                              # Datei schließen
for entry in liste:                    #liste ausgeben
    print entry
das if line.strip() sorgt dafür, daß Leerzeilen übersprungen werden.


Gruß

Dookie

Verfasst: Dienstag 18. Mai 2004, 18:53
von Milan
Dookie hat geschrieben:Hi Gast,

und was machst Du wenn die Datei von einem Mac kommt? Da sind die Zeilenumbrüche "\r\n" also 2 Zeichen. Und was ist, wenn bei der letzten Zeile kein Zeilenumbruch ist?
Hi. Ich glaub ich hab ein besseren Vorschlag: öffne die Datei im universal Mode, dann werden alle Zeilenumbrüche als "\n" dargestellt. Nun reicht ein einfaches split und das zeilenweise Lesen ist auch nicht mehr notwendig...

Code: Alles auswählen

f=file("test.txt", "U")
liste=f.read().split("\n")
f.close()