如何实现二维列表/数组保存与读取时完全保留原格式?
解决列表保存与读取后格式一致的问题
你的核心问题是用numpy保存元组列表时,没有正确设置分隔规则,导致读取后结构变形。下面提供三种可行方案:
方案一:修正numpy的保存与读取逻辑
通过指定分隔符,确保元组的两个元素在文件中分开存储,读取后再转换为元组列表:
import numpy as np times = [('7:00 AM', 'F'), ('7:10 AM', 'F'), ('7:20 AM', 'F'), ('7:30 AM', 'F'), ('7:40 AM', 'F'), ('7:50 AM', 'F'), ('8:00 AM', 'F'), ('8:10 AM', 'F'), ('8:20 AM', 'F'), ('8:30 AM', 'F'), ('8:40 AM', 'F'), ('8:50 AM', 'F'), ('9:00 AM', 'F')] # 保存时用逗号分隔每个元组的元素,确保格式正确 np.savetxt("Times_Array.txt", times, fmt="%s,%s") # 读取时以逗号分隔,再将每行转为元组 content = np.genfromtxt('Times_Array.txt', delimiter=',', dtype='U10') content = [tuple(row) for row in content] print("原始列表:", times) print("读取后列表:", content) print("是否完全一致:", content == times)
方案二:用pickle直接序列化(最简便)
pickle可以直接保存Python原生对象,读取后直接恢复原结构,无需手动处理格式:
import pickle times = [('7:00 AM', 'F'), ('7:10 AM', 'F'), ('7:20 AM', 'F'), ('7:30 AM', 'F'), ('7:40 AM', 'F'), ('7:50 AM', 'F'), ('8:00 AM', 'F'), ('8:10 AM', 'F'), ('8:20 AM', 'F'), ('8:30 AM', 'F'), ('8:40 AM', 'F'), ('8:50 AM', 'F'), ('9:00 AM', 'F')] # 写入文件 with open("Times_Array.pkl", "wb") as f: pickle.dump(times, f) # 读取文件 with open("Times_Array.pkl", "rb") as f: content = pickle.load(f) print("原始列表:", times) print("读取后列表:", content) print("是否完全一致:", content == times)
方案三:用csv模块(适合可读文本格式)
csv模块专门处理结构化文本,能完美保留元组的双元素结构:
import csv times = [('7:00 AM', 'F'), ('7:10 AM', 'F'), ('7:20 AM', 'F'), ('7:30 AM', 'F'), ('7:40 AM', 'F'), ('7:50 AM', 'F'), ('8:00 AM', 'F'), ('8:10 AM', 'F'), ('8:20 AM', 'F'), ('8:30 AM', 'F'), ('8:40 AM', 'F'), ('8:50 AM', 'F'), ('9:00 AM', 'F')] # 写入csv文件 with open("Times_Array.csv", "w", newline='') as f: writer = csv.writer(f) writer.writerows(times) # 读取csv文件并转为元组列表 with open("Times_Array.csv", "r") as f: reader = csv.reader(f) content = [tuple(row) for row in reader] print("原始列表:", times) print("读取后列表:", content) print("是否完全一致:", content == times)
原代码问题分析
你之前的代码中,np.savetxt默认用空格分隔元组元素,导致每个元组被拼成单个字符串写入文件;而读取时指定delimiter=",",但文件中没有逗号,因此每行被识别为一个元素,最终得到一维数组,和原结构不一致。
内容的提问来源于stack exchange,提问作者Searcher512
相关产品推荐
相关产品推荐

