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

保存/读取numpy ndarray至文本文件时行数减少1行的问题

问题原因拆解

咱们来捋下行数减少的问题,主要踩了这几个坑:

  • 误跳过第一行数据:你用f.readline()想跳过“表头”,但实际上np.savetxt保存这个数组时根本没写表头,这直接把第一行数据给跳过了,总行数自然少了1——这是最直接的原因。
  • 数据类型不匹配(隐藏风险):你保存的是字符串类型数组(字典键大多是字符串,而且指定了fmt='%s'),但读取时np.loadtxt()默认会按浮点数解析。如果你的键不是纯数字字符串,轻则读取报错,重则可能导致部分行被异常忽略,间接影响行数统计。
  • 文件路径不一致:保存的路径是'filepath/file.txt',读取的却是"step_2/Part_DBS/S3_DBs/GO_For_SVM.txt"——如果这俩不是同一个文件,那你读的本来就是行数更少的文件,也会出现这个问题。
  • 变量名踩坑:你用了dict当变量名,这会覆盖Python内置的dict类,后续再想创建字典就会出问题,这是个容易忽略的隐藏bug。
修复后的代码方案

针对这些问题,给你调整好的代码:

#!/usr/bin/env python
import numpy as np

# 重点:别用dict当变量名,换成my_dict这类自定义名字
my_dict = {"apple": 1, "banana": 2, "cherry": 3}  # 示例字典,替换成你的实际字典
dictkey = my_dict.keys()
Xarr = np.array(dictkey).reshape(-1, 1)
print("保存前数组形状:", Xarr.shape)

# 统一文件路径,避免路径不一致的问题
file_path = "step_2/Part_DBS/S3_DBs/GO_For_SVM.txt"
np.savetxt(file_path, Xarr, fmt='%s')

# 读取时不要跳过行,并且指定dtype=str读取字符串类型
X = np.loadtxt(file_path, dtype=str)
# 重新reshape保持(R,1)的形状
X = X.reshape(-1, 1)
print("读取后数组形状:", X.shape)

如果后续你需要给文件加表头(比如和其他工具兼容),可以这么写:

# 保存时添加表头
np.savetxt(file_path, Xarr, fmt='%s', header='dict_keys')
# 读取时用skiprows=1跳过表头行
X = np.loadtxt(file_path, dtype=str, skiprows=1).reshape(-1,1)

这样就能保证保存和读取的行数完全一致啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:59:59