IPython Problem beim Lesen von Dateien

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
Hajo87
User
Beiträge: 3
Registriert: Montag 17. November 2014, 02:08

Hallo,

ich habe ein Problem mit IPython. Ich möchte gern Logfiles auslesen (.log) und habe dafür zum einen readlines(), sowie eine for-Schleife (for lines in file) benutzt. Zuvor habe ich die Datei natürlich geöffnet. Leider funktioniert das nicht so ganz. Das Programm scheint keine Zeilen in der Datei zu finden, obwohl welche da sind. Wenn ich zum Beispiel eine for-Schleife benutze und dem Programm sage, es soll für jede Zeile etwas ins Terminal drucken, druckt er einfach nichts. Daher nehme ich an, dass die Zeilen nicht erkannt werden. Hat jemand eine Idee, wo das Problem liegen könnte und wie ich es beheben könnte?
Ich benutze IPython über Anaconda in Windows 7.

Vielen Dank schonmal im Voraus.
Hannes.
Benutzeravatar
snafu
User
Beiträge: 6736
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Bitte poste den kompletten und *tatsächlich verwendeten* Codeausschnitt, der zu dem Problem führt.
BlackJack

@Hajo87: Falls Du mit `readlines()` alle Zeilen in eine Liste liest, dann kannst Du danach nicht mehr einfach über das gleiche Dateiobjekt mit einer ``for``-Schleife iterieren. Der Dateizeiger ist durch das erste einlesen dann ja schon am Ende der Datei angelangt. Du hast die ganzen Zeilen ja aber auch schon in einer Liste, also könntest Du auch da drüber iterieren. Oder wahlweise das einlesen in eine Liste sein lassen.
Hajo87
User
Beiträge: 3
Registriert: Montag 17. November 2014, 02:08

Hier ist mein Code:

Code: Alles auswählen

i = 2 # VP
j = 1 # run
k = 1 # trialnumber
l = 5 # header nicht mitzählen-variable
m = 0 # counting rows muss für jedes run auf 0 gesetzt werden!
n = 0 # Iteration über die Zeilen in einem File
#a = ? # spaltennummer für Ereignis (Pulse, response, etc.)
#b = ? # spaltennummer für response
#c = ? # spaltennummer für RT_target
#y = ? # 

new_file = open('new_file.txt','w')

#Header schreiben
#new_file.write('VP'+'\t'+'run'+'\t'+'trial'+'\t'+'resp'+'\t'+'RT_target'+'\n')


while i <= 1:
	while j <=1:
		file = open(str(i)+'-insight_fMRI_v02_learning_run0'+str(j)+'.log')
		lines = file.readlines()
		file.close()
		print lines
		for line in lines:
			m = m+1
			print m
			new_file.write(m)
new_file.close()
Eine Sache noch, die mir da gerade einfällt, dass erste mal hat der code geklappt. Danach nicht mehr.
BlackJack

@Hajo87: Was heisst denn bitte ”nich klappen”? Das da wird niemals abbrechen ausser durch eine Ausnahme. Falls Du eine Ausnahme bekommst, wäre es nett zu wissen welche. Inklusive des Tracebacks.

Einbuchstabige Namen sind in der Regel keine gute Idee. Du schreibst ja hinter alle einen Kommentar was der Name bedeutet — *das* sollte der Name *selbst* aussagen, statt irgenwelcher nichtssagender Einzelbuchstaben.

Edit: Ich Trottel: Du hast da natürlich nur eine bzw. zwei Endlosschleifen wenn die Bedingungen überhaupt mal erfüllt sind. Ansonsten wird natürlich die entsprechende Schleife gar nicht ausgeführt. Warum denkst Du denn das die Schleifen ausgeführt werden sollten?
Hajo87
User
Beiträge: 3
Registriert: Montag 17. November 2014, 02:08

Verdammt... :shock:
Habe meinen Fehler gefunden:

Code: Alles auswählen

i = 2
...
...

while i <=1


oh man ich Obertrottel. Das ist jetzt ein bisl dolle peinlich.
Funktioniert jetzt natürlich.

Danke für eure Mühen. Ich hoffe ihr habt wenigstens gelacht.
Kann man das hier löschen? :oops:

PS: Das mit den besser zu identifizierenden Variablen ist ne ganz gute Idee, Danke!
Antworten