使用np.loadtxt触发ValueError,求助解析‘2.18’的含义
解析numpy读取TXT文件时出现的
2.18错误 嗨,这个问题我熟!你看到的2.18里的其实是UTF-8字节顺序标记(BOM)——它是某些文本编辑器(比如Windows自带的记事本)保存UTF-8格式文件时,自动添加在文件开头的特殊隐藏字节序列(对应十六进制的EF BB BF)。
当numpy用默认编码(通常是utf-8)读取这类文件时,不会自动识别并忽略这个BOM,而是把这三个字节当成普通字符解析,就变成了你看到的,和后面的数字连在一起形成2.18,numpy自然没法把这个串识别成有效的数值,直接就触发ValueError了。
给你几个实用的解决办法:
- 直接指定编码读取
使用numpy的loadtxt()或genfromtxt()时,加上encoding='utf-8-sig'参数,这个编码会自动跳过开头的UTF-8 BOM:import numpy as np # 替换成你的文件路径 data = np.loadtxt('your_data.txt', encoding='utf-8-sig') - 手动去除BOM后读取
如果场景不支持指定编码,也可以先手动读取文件内容并去掉开头的BOM,再传给numpy处理:import numpy as np with open('your_data.txt', 'r', encoding='utf-8') as f: # \ufeff是UTF-8 BOM对应的Unicode字符,用lstrip去掉开头的它 content = f.read().lstrip('\ufeff') # 这里假设数据是空格分隔的,可根据实际情况调整sep参数 data = np.fromstring(content, sep=' ') - 重新保存文件(无BOM)
用VS Code、Notepad++这类编辑器打开你的TXT文件,选择「以UTF-8无BOM格式保存」,之后numpy用默认编码读取就不会碰到这个问题了。
内容的提问来源于stack exchange,提问作者Tissuebox
相关产品推荐
相关产品推荐

