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

如何解决np.savetxt保存字符串与数值混合数据的类型不匹配错误?

问题描述

我在Python中有一个混合类型列表:

inputs = ['eos', 5, 10, 20, 30]

其中第一个元素是字符串,其余为整数。我希望将该列表保存到文件后,在另一Python笔记本中读取,能够通过inputs[i]调用对应元素,且元素保持原类型(如inputs[0]返回字符串"eos",inputs[1]返回整数5)。

尝试用以下代码保存列表时出现错误:

np.savetxt(path + '/inputs.txt', inputs, delimiter=" ", header = 'Eos N1 N2 N3 N4') 

错误信息:

TypeError: Mismatch between array dtype ('<U32') and format specifier ('%.18e')
解决方案

方法1:使用pickle(推荐,简单直接)

pickle可直接序列化Python对象,完美保留类型信息:

保存代码:

import pickle

inputs = ['eos', 5, 10, 20, 30]
save_path = path + '/inputs.pkl'

with open(save_path, 'wb') as f:
    pickle.dump(inputs, f)

读取代码:

import pickle

load_path = path + '/inputs.pkl'

with open(load_path, 'rb') as f:
    inputs = pickle.load(f)

# 验证类型
print(type(inputs[0]))  # <class 'str'>
print(type(inputs[1]))  # <class 'int'>

方法2:使用json(纯文本格式,可读性好)

json支持字符串、整数等基础类型,读取后可保持原类型:

保存代码:

import json

inputs = ['eos', 5, 10, 20, 30]
save_path = path + '/inputs.json'

with open(save_path, 'w') as f:
    json.dump(inputs, f)

读取代码:

import json

load_path = path + '/inputs.json'

with open(load_path, 'r') as f:
    inputs = json.load(f)

# 验证类型
print(type(inputs[0]))  # <class 'str'>
print(type(inputs[1]))  # <class 'int'>

方法3:自定义文本读写(手动处理类型)

若需要纯文本格式,可手动写入并解析:

保存代码:

inputs = ['eos', 5, 10, 20, 30]
save_path = path + '/inputs.txt'

# 将元素转为字符串后写入
with open(save_path, 'w') as f:
    f.write('Eos N1 N2 N3 N4\n')  # 写入表头
    f.write(' '.join(map(str, inputs)) + '\n')

读取代码:

load_path = path + '/inputs.txt'

with open(load_path, 'r') as f:
    next(f)  # 跳过表头
    line = f.readline().strip()
    parts = line.split()
    # 手动转换类型:第一个为字符串,其余转整数
    inputs = [parts[0]] + list(map(int, parts[1:]))

# 验证类型
print(type(inputs[0]))  # <class 'str'>
print(type(inputs[1]))  # <class 'int'>

原代码报错原因

np.savetxt主要用于保存数值型numpy数组,当传入混合类型列表时,numpy会将整个数组转为字符串类型(<U32表示长度32的Unicode字符串),但默认格式说明符%.18e是针对浮点数的,字符串无法适配该格式,因此出现类型不匹配错误。

内容的提问来源于stack exchange,提问作者Ramos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:05:23