PsychoPy简单矩形实验CSV读取无法转浮点数报错求助
问题原因
报错信息里的是UTF-8编码带BOM(字节顺序标记)的特征前缀字符,你使用的CSV文件保存时默认带了BOM头,读取第一行第一个字段时会把该前缀和实际的数值拼接成完整字符串,导致无法直接转换为float类型。
解决方案
你可以任选以下一种方式修复:
- 方案1(无需修改CSV文件,推荐):修改文件读取的编码参数,将代码中打开文件的行替换为:
datafile = open("stimuli.csv", "rt", encoding="utf-8-sig")utf-8-sig编码会自动识别并移除文件开头的BOM标记,不影响后续内容读取。 - 方案2(修改源文件):用Excel、记事本等工具打开
stimuli.csv,选择「另存为」,保存时编码选项选择「UTF-8(无BOM)」或「ANSI」,保存时保持分隔符为分号即可。
可选代码优化
建议使用with语法管理文件句柄,无需手动调用close()方法,避免异常场景下的资源泄漏,修改后的读取部分代码如下:
with open("stimuli.csv", "rt", encoding="utf-8-sig") as datafile: reader = csv.reader(datafile, delimiter=";") for row in reader: if len(row)==2: # ignore empty and incomplete lines size = float(row[0]) # the first element in the row converted to a floating point number color = row[1] # the second element in the row stimulus = visual.Rect(win, width=size, height=size) stimulus.fillColor = color stimuli.append(stimulus)
内容的提问来源于stack exchange,提问作者José Miguel Teles
相关产品推荐
相关产品推荐

