- 积分
- 3638
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-10-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 15195775117 于 2021-11-11 13:44 编辑
前几天,我要保存一个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
|
|