Python读取dat文件带重复标识数值并转换为Numpy数组问题求解
报错原因
np.fromstring仅支持直接解析纯逗号分隔的数字字符串,你输入的内容包含3*5这类自定义重复语法,不属于标准数字格式,因此无法被正常识别,触发数据不匹配警告。
修复方案
你需要先预处理字符串解析*重复规则,再转换为numpy数组,以下代码同时兼容带[]和不带[]的输入格式:
import numpy as np with open('trial.dat', 'r') as f: data = f.readlines() # 去除注释、首尾空格 x = [(d+' ')[:d.find('#')].rstrip() for d in data][0] # 兼容[]格式,自动去除首尾括号 x = x.strip('[]') # 拆分所有逗号分隔的单元 units = x.split(',') res = [] for unit in units: unit = unit.strip() if '*' in unit: # 拆分数字和重复次数 num, repeat = map(int, unit.split('*')) res.extend([num]*repeat) else: # 普通数字直接添加 res.append(int(unit)) # 转numpy数组 y = np.array(res, dtype=int)
运行后y的输出符合预期:[1 2 3 3 3 3 3]
输入格式说明
- 完全可以使用
[1,2,3*5]的格式编写.dat文件,上述代码已经适配了括号的自动处理逻辑 - 也可以保留原有
1,2,3*5的无括号格式,两种写法都能正常解析 - 支持多组重复规则同时使用,例如
2*3,4*2,5可解析为[2,2,2,4,4,5]
内容的提问来源于stack exchange,提问作者msci
相关产品推荐
相关产品推荐

