Seite 1 von 1
.readline() geht file nicht komplett durch
Verfasst: Freitag 6. Mai 2011, 07:50
von Basti91
Hallo ich habe ein Problem mit der .readline() Funktion.
Zunächst habe ich den Code so aufgebaut:
Code: Alles auswählen
def reading_datasets(filepath): #reading the required datasets
file = open(filepath,"r")
targetlist = []
for line in file:
if line[0:3]=='smi': #check if line begins with 'smi'
targetlist.append(line) #to identify the required datasets
file.close()
return targetlist
Da das gesamte Script auf einem Websphere laufen soll habe ich es getestet aber es gibt Probleme mit
Daher habe ich die Funktion, wie folgt umgebaut, nun läuft das Script auf dem Websphere, jedoch wird die ausgewählte Datei nicht mehr vollkommen ausgelesen
Code: Alles auswählen
def reading_datasets(filepath): #reading the required datasets
file = open(filepath,"r")
targetlist = []
while file.readline():
line = file.readline()
if line[0:3]=='smi': #check if line begins with 'smi'
targetlist.append(line) #to identify the required datasets
file.close()
return targetlist
Hat jemand ne Idee was da falsch läuft?
Re: .readline() geht file nicht komplett durch
Verfasst: Freitag 6. Mai 2011, 07:56
von Basti91
Kurzes Update: die File wird doch fertig gelesen jedoch wird nur jede zweite Zeile bearbeitet
Re: .readline() geht file nicht komplett durch
Verfasst: Freitag 6. Mai 2011, 08:02
von deets
Na, du rufst readline ja zweimal auf. Einmal im while, und einmal danach.
Das sollte gehen.
Re: .readline() geht file nicht komplett durch
Verfasst: Freitag 6. Mai 2011, 08:03
von Basti91
Problem gelöst, folgender Code läuft:
Code: Alles auswählen
def reading_datasets(filepath): #reading the required datasets
file = open(filepath,"r")
lines = file.readlines()
targetlist = []
for line in lines:
#print (line)
if line[0:3]=='smi': #check if line begins with 'smi'
targetlist.append(line) #to identify the required datasets
file.close()
return targetlist
Danke für den Tipp
Re: .readline() geht file nicht komplett durch
Verfasst: Freitag 6. Mai 2011, 08:28
von mkesper
with sollte noch benutzt werden!
Außerdem reicht es,
zu iterieren, es ist nicht nötig, dafür die komplette Datei vorher in den Speicher zu lesen.
Re: .readline() geht file nicht komplett durch
Verfasst: Freitag 6. Mai 2011, 08:29
von lunar
@Basti91: Wenn dieser Quelltext funktioniert, dann muss auch der aus Deinem ersten Beitrag funktionieren. Also kannst Du darauf verzichten, alle Zeilen auf einmal einzulesen, und stattdessen wieder zeilenweise lesen:
Code: Alles auswählen
with open(filepath, 'r') as stream:
for line in stream:
…
Re: .readline() geht file nicht komplett durch
Verfasst: Freitag 6. Mai 2011, 08:32
von BlackJack
@Basti91: Was ist denn das Problem bei ``for line in file:``?
Re: .readline() geht file nicht komplett durch
Verfasst: Freitag 6. Mai 2011, 08:40
von bwbg
Ansonsten täte es noch eine List Comprehension (LC), da du ohnehin eine Liste zurückgibst:
ungetestet:
Code: Alles auswählen
with open(path, 'r') as stream:
return [line for line in stream if line.startswith('smi')]
Grüße ... bwbg
Re: .readline() geht file nicht komplett durch
Verfasst: Freitag 6. Mai 2011, 09:48
von Basti91
@BlackJack: Das Problem liegt an der Websphere, die diesen Befehl komischerweise nicht ausführen konnte :K
Re: .readline() geht file nicht komplett durch
Verfasst: Freitag 6. Mai 2011, 10:33
von BlackJack
@Basti91: Was bedeutet das *genau*? Welche Fehlermeldung bekommst Du? (Welche Python-Version wird denn dort verwendet?)
Re: .readline() geht file nicht komplett durch
Verfasst: Freitag 6. Mai 2011, 10:41
von Basti91
Es wird Jthon verwendet
Re: .readline() geht file nicht komplett durch
Verfasst: Freitag 6. Mai 2011, 11:37
von BlackJack
@Basti91: Und was ist die Fehlermeldung? Auch in Jython sind Dateiobjekte iterierbar.
Re: .readline() geht file nicht komplett durch
Verfasst: Montag 9. Mai 2011, 08:02
von Basti91
@BlavkJack: Tut mir leid, ich kann dir echt nichts genaueres über die Websphere sagen, da ich mich auch erst am einarbetien bin.
Re: .readline() geht file nicht komplett durch
Verfasst: Montag 9. Mai 2011, 08:21
von lunar
@Basti91: Na, Du wirst doch wohl irgendetwas genaueres über den Fehler sagen können als „geht nicht“? Woran erkennst Du denn sonst überhaupt, dass "for line in file:" nicht funktioniert?
Re: .readline() geht file nicht komplett durch
Verfasst: Dienstag 10. Mai 2011, 07:03
von Basti91
Habe den alten Code jetzt nochmal ausgekramt und auf der websphere ausgeführt:
Code: Alles auswählen
def eintraege_auslesen(dateipfad): #Benötigte Datensätze auslesen
datei = open(dateipfad,"r")
zielliste = []
for line in datei:
if line[0:3]=='smi': #Überprüfen ob die ersten 3 char der Zeile 'smi'
zielliste.append(line) #sind um benötigten Datensatz zu identifizieren
return zielliste
datei.close()
Folgende Fehlermeldung wird mir zu oben genannter Codepassage geworfen:
: command not found:
./script.py: line 6: syntax error near unexpected token `('
./script.py: line 6: `def eintraege_auslesen(dateipfad): #Benötigte Datens'¤tze auslesen
Re: .readline() geht file nicht komplett durch
Verfasst: Dienstag 10. Mai 2011, 07:50
von BlackJack
@Basti91: Da hat Python keine Probleme mit `readline()`, sondern eine Unix-Shell verständlicherweise Probleme damit Python-Quelltext auszuführen. Wie gibt man denn bei Websphere an mit welchem Programm ein Skript ausgeführt werden soll? Das scheint hier schief gelaufen zu sein.