Hallo Chill-man,
wenn ich das richtig sehe, hast du mehrere dieser Dateien. Und jede Datei enthällt Meta-Datein zur Person (und zum Versuch), eine Legende und dann nach einer Kopf-Zeile mehrere Zeilen an Werten.
Fangen wir doch erstmal an, wie du eine Datei so in die Python-Welt bringst, dass du damit dann vernünftig weiterarbeiten kannst.
Die folgenden Beispiel-Codesnippets sind noch nicht zusammenhängend, du musst sie noch zu einem vernüftigen Script/Programm zusammenschrauben.
1.) Einlesen der Datei
Als ersten Schritt, musst du eine solche Datei ja erstmal irgendwie in Python hinneinbringen. Dies machst du mit der Python Standardfunktion
file().
Code: Alles auswählen
subject_file = file(r'e:\01_01.BlendVersuch1')
subject_content = subject_file.read()
subject_file.close()
lines = subject_content.splitlines() # hier wird der Inhalt in eine Liste aufgesplittet
Nun hast du eine Liste mit den Zeilen deiner Datei. Dabei ist jeder Eintrag eine Zeichenkette, mit der du so natürlich noch nichts anfangen kannst.
Interessant für dich ist ja der Teil nach dieser Kopfzeile, vermute ich mal:
Code: Alles auswählen
block trial object_type preview_duration response RT error_code
... weswegen der nächste Schritt wäre, die Zeilen solange durchzugehen, bis du diese Stelle erreicht hast.
Wie auch immer du es machst ... ist letztendlich dir überlassen
.
Hier wäre aber z.B. ein Biespiel, wie du die Position dieser Kopfzeile in der Liste ermitten "könntest" (den Listenindex):
Code: Alles auswählen
headers = ['block', 'trial', 'object_type', 'preview_duration', 'response', 'RT', 'error_code']
header_index = -1
for line in lines:
if line.strip().replace('\t','').replace(' ','') == ''.join(headers):
header_index = lines.index(line)
Anmrk: Bei deiner Beispieldatei sollte header_index den Wert 20 nach diesem Ablauf haben. Prüfe zudem am besten, dass du auch wirklich einen gültigen Index bekommen hast (z.B. header_index != -1 ... oder so).
Nun hast du aber schonmal auf jeden Fall die Stelle ab der die gelisteten Testdaten auftauchen, aber die müssen nun ebenfalls in eine für Weiterbearbeitungen sinnvolle Struktur gebracht werden: nämlich in eine
Liste von Dictionaries.
2.) Die Testdaten-Zeilen in Dictionary-Form parsen
Für das Parsen verwende ich in dem nachfolgendem Beispiel die
Regular Expressions
Um mit Regular Expressions zu arbeiten, musst zu Begin die ensprichtende Lib hiefür geladen haben.
Danach kannst du dir ein RE-Objet zusammenbrauen:
Code: Alles auswählen
import re # wie ja bereits erwähnt erforderlich
testdata_pattern = '^\s*' + '\s*'.join(['(?P<%s>\d*)'%h for h in headers]) + '.*$'
testdataRE = re.compile(testdata_pattern)
... mit welchem man die einzelnen Zeilen ab dem Header-Index ganz einfach in fertige Dictionaries zerlegen kann:
Code: Alles auswählen
subject_testdata = []
for line in lines[header_index+1:]:
match = testdataRE.match(line)
if match:
subject_testdata.append(match.groupdict())
.... und nun hat man eine Liste von Dictionaries mit den Schlüsseln der Kopfzeile und den jeweiligen Werten (Achtung: es sind noch alles Strings .. du könntest sie der Einfachheit versuchen in Integer oder auch Booleans umzuwandeln).
3.) Auswertung
Nun kann man diese Strutkur nach eigenen Wünschen und Kriterien auswerten.
Z.B. wenn du die Anzahl aller
richtigen Ergebnisse haben möchtest:
Code: Alles auswählen
true_counter = 0
for test in subject_testdata:
if test['error_code'] and int(test['error_code']) == 1:
true_counter += 1
... etc. pp.
Achja .. die anderen Metadaten einer Probanten-Datei kannst du natürlich ebenfalls ausparsen. Brauchst nur andere RE-Patterns, Listenstrukturen, etc. dafür
.
Viel Spass dabei,
>>Masaru<<