python中保存列表和字典

python保存列表

(1)保存为.npy文件:

先将列表转为np.array,再进行保存

import numpy as np
graphTable = [
           [[0,3],[1,3],1,'1'],  #A-B
           [[1,3],[2,3],1,'2'],  #B-C
           [[2,3],[2,1],2,'3'],  #C-H
           [[1,3],[1,2],1,'4'],  #B-D
           [[1,2],[1,1],1,'5'],  #D-F
           [[1,2],[0,0],3,'6'],  #D-S
           [[1,1],[2,1],1,'7'],  #F-H
           [[1,1],[3,1],4,'8'],  #F-I
           [[2,1],[3,1],1,'9'],  #H-I
           [[3,3],[3,1],2,'10']  #G-I        
           ] 
m=np.array(graphTable)
np.save('demo.npy',m)

从.npy文件中读出np.array,再转为list格式

a=np.load('demo.npy')
graphTable=a.tolist()

注意:在numpy1.16后np.load()中的allow_pickle默认为False,所以load时需要加上参数allow_pickle=True

numpy中:
(1) load() 和 save() 函数是读写文件数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npy 的文件中;
(2)savez() 函数用于将多个数组写入文件,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npz 的文件中;
(3)loadtxt() 和 savetxt() 函数处理正常的文本文件(.txt 等)

numpy.save(file, arr, allow_pickle=True, fix_imports=True)

  • file:要保存的文件,扩展名为 .npy,如果文件路径末尾没有扩展名 .npy,该扩展名会被自动加上。
  • arr: 要保存的数组
  • allow_pickle: 可选,布尔值,允许使用 Python pickles 保存对象数组,Python 中的 pickle用于在保存到磁盘文件或从磁盘文件读取之前,对对象进行序列化和反序列化。
  • fix_imports: 可选,为了方便 Pyhton2 中读取 Python3 保存的数据。

**numpy.savez(file, *args, kwds)

  • file:要保存的文件,扩展名为 .npz,如果文件路径末尾没有扩展名 .npz,该扩展名会被自动加上。
  • args: 要保存的数组,可以使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为 arr_0, arr_1, … 。
  • kwds: 要保存的数组使用关键字名称。

savetxt() 函数是以简单的文本文件格式存储数据,对应的使用 loadtxt() 函数来获取数据

np.loadtxt(FILENAME, dtype=int, delimiter=' ')
np.savetxt(FILENAME, a, fmt="%d", delimiter=",")

参数 delimiter 可以指定各种分隔符、针对特定列的转换器函数、需要跳过的行数等。

import numpy as np 
 
a = np.array([1,2,3,4,5]) 
np.savetxt('out.txt',a) 
b = np.loadtxt('out.txt')  
 
print(b) #[1. 2. 3. 4. 5.]

使用 delimiter 参数:

import numpy as np 
 
 
a=np.arange(0,10,0.5).reshape(4,-1)
np.savetxt("out.txt",a,fmt="%d",delimiter=",") # 改为保存为整数,以逗号分隔
b = np.loadtxt("out.txt",delimiter=",") # load 时也要指定为逗号分隔
print(b)
[[0. 0. 1. 1. 2.]
 [2. 3. 3. 4. 4.]
 [5. 5. 6. 6. 7.]
 [7. 8. 8. 9. 9.]]

(2)保存为.txt文件:

保存.txt需要将列表内容转为字符串格式

##保存
ipTable=['123.111.111.1','111.111.111.1']
fileObject = open('sampleList.txt', 'w')  
for ip in ipTable:  
    fileObject.write(str(ip))  
    fileObject.write('\n') 
fileObject.close()  

##读取
f = open("sampleList.txt","r")   #设置文件对象
str = f.read()     #将txt文件的所有内容读入到字符串str中
f.close()   #将文件关闭

保存为.npy会保留列表原有的内容格式,使用更为方便,
但保存为.txt格式同样的数据占用空间会更小。

python保存字典

(1)使用numpy,保存为.npy文件

import numpy as np
 
# Save
dict = {'a':1,'b':2,'c':3}
np.save('my_file.npy', dict) # 注意带上后缀名
 
# Load
load_dict = np.load('my_file.npy').item()
print(load_dict['a']) 

(2)使用pickle,保存为.pkl文件

# 字典保存
dict = {'a':1,'b':2,'c':3}
f_save = open('dict_file.pkl', 'wb')
pickle.dump(dict, f_save)
f_save.close()
 
# # 读取
f_read = open('dict_file.pkl', 'rb')
dict2 = pickle.load(f_read)
print(dict2)
f_read.close()


(3)使用JSON(可在pycharm中直接查看)

在python中,JSON模块提供以下四个功能,
dumpsdumploadsload。其中dumps把数据类型转换成字符串并存储在文件中,loads把字符串转换成数据类型,load把文件打开从字符串转换成数据类型;

  • 字典转化为JSON并写入
import json
# 创建字典
info_dict = {'name': 'Joe', 'age': 20, 'job': 'driver'}
# dumps 将数据转换成字符串
info_json = json.dumps(info_dict,sort_keys=False, indent=4, separators=(',', ': '))
# 显示数据类型
print(type(info_json))
f = open('info.json', 'w')
f.write(info_json)
  • 读取JSON文件,并转化为字典
# JSON到字典转化
f2 = open('info.json', 'r')
info_data = json.load(f2)
print(info_data)
# 显示数据类型
print(type(info_data))

参考1
参考2

上一篇:npy数据存储模式与h5py数据存储模式


下一篇:End-to-End Learning of Representations for Asynchronous Event-Based Data (2)