You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:17:14