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()