| 
 
	积分3625贡献 精华在线时间 小时注册时间2014-10-21最后登录1970-1-1 
 | 
 
| 
本帖最后由 15195775117 于 2021-11-11 13:44 编辑
x
登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册 
  
 前几天,我要保存一个4308行×2000列的数组,
 数组用numpy.ndarray格式,元素是浮点型字符串,例如'20.2474',
 最后保存为pickle文件,但这个文件居然有1.02G!
 
 
 
   
 
 我又回头看了一下原始文件,是4308个json文件,总计才83.8M,所以,我保存的pickle文件是非常臃肿的!
 很有必要优化下pickle文件里变量的数据类型!
 
 
 
   
 
 处理程序如下:
 
 
 import pickle
 import numpy as np
 import json
 
 fold=r'C:\Users\xiumu\Desktop'
 
 # 读取廓线数据:
 file2=fold+'\\cp_o3.pkl'
 fp=open(file2,'rb')
 x=pickle.load(fp)
 fp.close()
 
 # 字符串转浮点:
 x=x.astype(float)
 
 # 臭氧值取整数即可,四舍五入:
 x=np.round(x)
 
 # 臭氧数值最大就几千,使用int16即可,节约空间:
 x=x.astype(np.int16)
 
 # 因为ndarray和datetime格式仅Python支持,
 # 想在json上用,还得转list,
 # ndarray转内置list:
 x=x.tolist()
 
 # 写为json文件:
 a_json=json.dumps({"2D_array":x},ensure_ascii=False)
 fp=open(fold+'\\data.json','w')
 print(a_json,file=fp)
 fp.close()
 
 # 读json文件
 fp=open(fold+'\\data.json','r',encoding='utf-8')
 b_json=fp.read()
 fp.close()
 b_dict=json.loads(b_json) # json 字符串转换成字典
 y=b_dict['2D_array']
 print(len(y[-1]))
 
 
 # 写为pickle文件:
 fp=open(fold+'\\data.pkl','wb')
 pickle.dump(x,fp)
 fp.close()
 
 
 # 读pickle文件:
 fp=open(fold+'\\data.pkl','rb')
 x=pickle.load(fp)
 fp.close()
 print(x[100])
 
 
 结果:
 
 
 json文件26M,pickle文件16M
 
 
   
 
   
 
 
 
 
 
 | 
 |