爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7823|回复: 1

[经验总结] 数据类型的重要性,Python数据类型转换:文件从1G到16M!

[复制链接]

新浪微博达人勋

发表于 2021-11-11 11:55:11 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 15195775117 于 2021-11-11 13:44 编辑

前几天,我要保存一个4308行×2000列的数组,
数组用numpy.ndarray格式,元素是浮点型字符串,例如'20.2474',
最后保存为pickle文件,但这个文件居然有1.02G!


最初pkl文件大小.png


我又回头看了一下原始文件,是4308个json文件,总计才83.8M,所以,我保存的pickle文件是非常臃肿的!
很有必要优化下pickle文件里变量的数据类型!


原始文件大小.png


处理程序如下:


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


json文件大小.png

pkl文件大小.png





点评

赞赞赞,取舍考量  发表于 2021-11-11 13:21
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表