datei einlesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
morpheus0023
User
Beiträge: 2
Registriert: Dienstag 18. Mai 2004, 15:29

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
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 ;-)
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
morpheus0023
User
Beiträge: 2
Registriert: Dienstag 18. Mai 2004, 15:29

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?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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