Python的小数据存储,用什么格局更有逼格?

小数据存储

咱们在编写代码的时分,经常会触及到数据存储的状况,假如是爬虫得到的大数据,咱们会挑选运用数据库,或许excel存储。但假如仅仅一些小数据,或许说关联性较强且存在存储后复用的数据,咱们该怎么存储呢?

运用open保存文本

最简略、粗犷+无脑的存储办法便是保存成一个文本文档了。
运用open函数,将成果一行行的保存成文本,这儿触及的知识点只需简略的几条:

  • 文件读写办法,r 、w、a、b、+ ,把握这几种即可。
  • 运用独自的open翻开文件时,必需求分外留意结束时的调用close()函数封闭文档
  • 引荐运用上下文管理器的with open操作

csv文件

之所以将csv与excel分开说,首要需求扫盲下,csv归于特定格局的文本文件(运用逗号分隔),而excel是二进制文件。

csv可以直接运用文本编辑器翻开,excel不可…

其实csv文件,可彻底运用open函数进行保存,只需你将每行数据都运用,分离隔即可。
别的,python自带csv库,可以很便利的操作与保存该数据

xml文件

xml文件的办法,现已逐步被筛选了,为什么这么说?由于它繁琐的树形结构,导致了在传输过程中,占用了更多的内存。所以,除非必要,真的不引荐以xml的办法存储你的数据…

configparser

python模块中configparser是一个专门用来保存配置文件的模块库,它很合适保存一些具有关联性的数据内容,尤其是配置文件。经过界说section的办法,在section中增加key:value的办法,可以直观明晰的数据内容。我之前专门写了一篇关于它的文章,会附在大众号的字文章中,喜爱的朋友可以去看看。

pyyaml

yaml类型的文件渐渐的变成了许多Linux下的干流配置文件类型,比方Docker、Ansible等等都在运用yaml,但它仍然不是一个干流的数据存储办法,由于yaml自身的格局要求过分苛刻,比结构化的Python格局更为严厉,喜爱的朋友可以去研讨下…

pickle

pickle模块的运用面很窄,但不得不说仍是有些人会运用,所以简略说些它的好坏:
优势:接口简略(与json类似);存储格局通用型,及在Windows、Linux等平台下通用;二进制存储,功率高
下风:pickle是python特定的协议,其他言语无法运用;pickle存在安全性,这个要侧重说下,看下图

Python的小数据存储,用什么格局更有逼格?

Json文件

说了上面那么多,压轴的仍是Json

首要相关于xml,现在更多的网站在数据传输中运用json格局,由于平等的字节下,json传输数据的功率要更高于xml。

Python的小数据存储,用什么格局更有逼格?

关于configparser,configparser有一个巨大的下风,在于配置文件只能支撑二维,section下界说option(key:value),假如想在option的value中再次界说列表、字典等数据类型,它只能识别为字符串,你需求将str手动再转化为对应的数据类型

而针对ymal,json没那么严厉的格局要求,写做一行仍是换行展现都随你,没那么苛刻的要求。
终究比照pickle,json格局是各种编程言语通用的数据格局,由所以key value的键值对,不存在loads之后的安全问题。而且你学会了json,也就学会了pickle,由于二者的运用办法一毛相同啊!

三分钟学会Json

1.简介

JSON(JavaScript Object Notation, JS 目标简谱) 是一种轻量级的数据交换格局。它根据 ECMAScript (欧洲计算机协会拟定的js标准)的一个子集,选用彻底独立于编程言语的文本格局来存储和表明数据。简练和明晰的层次结构使得 JSON 成为抱负的数据交换言语。易于人阅览和编写,一起也易于机器解析和生成,并有效地提高网络传输功率。

至于引荐运用Json的理由:

  1. Json格局是一种通用的数据类型
  2. Python内置json模块,便于操作
  3. json格局类似于python的dict
  4. json的保存与读取极为便利
  5. 学习成本低,3分钟包教包会

2.类型、语法阐明
Python的小数据存储,用什么格局更有逼格?

看到上图的Python与json比照联系,其实差异并不大,咱们只必需求分外留意几点即可:

  • json的数据为key:value,且以逗号分隔,但留意json运用双引号包裹键值对
  • 花括号中保存为目标,而方括号保存的是数组,不管python是list仍是tuple,终究都会转化为数组
  • json由所以js引申的数据类型,所以在布尔表达式与空值上,运用与python不同,必需求分外留意

3.json的办法

  • dump():将python目标序列化到一个文件,是文本文件,相当于将序列化后的json字符写到一个文件
  • load():从文件反序列表出python目标
  • json和pickle相同,都只需四个办法:
  • dumps():将python目标编码为json的字符串
  • loads():将字符串编码为一个python目标

即:带s的办法是数据类型间的转化str <--> dict,不带s的都是数据与文件的转化

4.实例阐明

在演示前,咱们该先界说一个初始化数据:

data = {
"in_use": True,
"info": {
"name_cn": 'Python',
"name_en": "BreezePython",
},
"contents": ["Python", "Java", "Linux"]
}

5.dumps() .loads()

import json
json.dumps(data)
>>> '{"in_use": true, "info": {"name_cn": "\u6e05\u98cePython", "name_en": "BreezePython"}, "contents": ["Python", "Java", "Linux"]}'
#Python学习沟通QQ群:857662006
#这儿咱们看到一个问题,中文反常,此刻咱们该增加参数ensure_ascii=False
json.dumps(data,ensure_ascii=False)
>>> '{"in_use": true, "info": {"name_cn": "Python", "name_en": "BreezePython"}, "contents": ["Python", "Java", "Linux"]}'
# 当然咱们你们可以漂亮的打印它
json_data = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '),ensure_ascii=False)
print(json_data)
>>> {
"contents": [
"Python",
"Java",
"Linux"
],
"in_use": true,
"info": {
"name_cn": "Python",
"name_en": "BreezePython"
}
}
# 了解了dumps,loads就最简略了...
json.loads(json_data)
{'contents': ['Python', 'Java', 'Linux'], 'in_use': True, 'info': {'name_cn': 'Python', 'name_en': 'BreezePython'}}

6.dump() .load()

import json
# Python学习沟通QQ群:857662006
# 先来看看dump将数据保存至文本
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=4)
# 同理咱们还可以正常的运用dumps完结写入操作
# f.write(json.dumps(data, indent=4))
# 保存了文本,咱们在经过load读取出来
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# 同理咱们还可以正常的运用loads完结读取操作
# data = json.loads(f.read())
print(data)
>>> {'in_use': True, 'info': {'name_cn': 'Python', 'name_en': 'BreezePython'}, 'contents': ['Python', 'Java', 'Linux']}

看到这儿,你是否发现,即使不会dump和load咱们相同可以正常的运用dumps和loads替换前两者,完结读写操作。三分钟学会了json的操作,而且买一送一顺便学会了pickle的操作。你是否get到?