-2

这是一些代码......每当我得到一个输出文件时,我都会得到一倍的数据。

       #For each record in keypress, a line is created in the file
        keyPress = []
        keyPress.append(event.waitKeys(keyList=['s','d'],timeStamped=clock))
        for key in keyPress:
            for l, t in key:
                f.write(str(images[index]) + "\t iteration \t" + str(k + 1) + "\t" + l + "\t" + str(t)+"\n")
f.close()
4

1 回答 1

1

这里有一些不清楚的地方,我还没有设法重现它。但无论如何我都会给出答案。首先,event.waitKeys只返回一个响应,因此实际上没有必要循环它们。所以我会做

l, t = event.waitKeys(keyList=['s','d'],timeStamped=clock)[0]

...这更好。所以一个完全可重现的解决方案是这样的:

# Set things up
from psychopy import visual, event, core
win = visual.Window()
clock = core.Clock()
f = open('log.tsv', 'a')

# Record responses for a few trials and save
for trial in range(5):
    l, t = event.waitKeys(keyList=['s','d'], timeStamped=clock)[0]  # [0] extracts the first (and only) element, i.e. the (key, rt) tuple which is then unpacked into l and t.
    f.write('trial' + trial + '\tkey' + l + "\tRT" + str(t) + "\n")
f.close()

与其像这样手动创建日志文件,不如考虑使用csv模块或 Psychopy 自己的data.TrialHandler. 通常使用 a 来表示试验dict并保存响应以及每个试验的属性是很好的。该csv模块有一个DictWriter方法。

于 2014-12-12T09:38:13.943 回答