如何从文件读取整数数组并重新存储为可正常访问的数组
解决3D数组字符串转数组的问题
你当前读取后得到的data是字符串类型,所以data[0]取的是字符串的第一个字符[,而非数组元素。要恢复成可索引访问的数组,需要把字符串解析为对应的列表/数组结构,以下是几种可行方案:
方案1:用标准库ast.literal_eval解析
这是最通用的方法,适合还原用str()写入的嵌套列表结构,安全且无需额外依赖:
import ast # 读取文件并解析字符串为列表 with open("file1.txt", "r") as f: data_str = f.read() data_array = ast.literal_eval(data_str) # 现在可以正常访问元素 print(data_array[0][0][0]) # 输出预期的253
ast.literal_eval会将符合Python字面量语法的字符串转换为对应的对象,这里就是还原出和原数组结构一致的嵌套列表。
方案2:针对numpy数组的优化读写(推荐)
如果你的array2d原本是numpy的ndarray,建议用numpy自带的读写方法,避免字符串解析的麻烦,同时保留数组结构信息:
改进写入方式
替换原来的str()写入:
import numpy as np # 方式1:二进制保存(高效,完整保留数组结构) np.save("file1.npy", array2d) # 方式2:文本保存(可读,适合需要查看内容的场景) np.savetxt("file1.txt", array2d.reshape(-1, array2d.shape[-1]), fmt="%d")
对应读取方式
- 二进制文件读取:
import numpy as np data_array = np.load("file1.npy") print(data_array[0][0][0]) # 输出253
- 文本文件读取(需还原原形状):
import numpy as np data = np.loadtxt("file1.txt", dtype=int) # 替换为你原数组的实际形状,比如原形状是(2, 1000, 2) data_array = data.reshape(2, -1, 2)
原读取方式失效的原因
text_file.read()返回的是文件内容的纯字符串,比如开头是"[[[ 253 122]...",此时data[0]只是取字符串的第一个字符[,只有将字符串解析为列表/数组对象后,才能通过多维索引访问内部的整数元素。
内容的提问来源于stack exchange,提问作者Kako Simi
相关产品推荐
相关产品推荐

