小数据存储python
咱们在编写代码的时候,常常会涉及到数据存储的状况,若是是爬虫获得的大数据,咱们会选择使用数据库,或者excel存储。但若是只是一些小数据,或者说关联性较强且存在存储后复用的数据,咱们该如何存储呢?数据库
使用open保存文本编程
最简单、粗暴+无脑的存储方式就是保存成一个文本文档了。
使用open函数,将结果一行行的保存成文本,这里涉及的知识点只有简单的几条:json
文件读写模式,r 、w、a、b、+ ,掌握这几种便可。数组
使用单独的open打开文件时,须要注意结尾时的调用close()函数关闭文档安全
csv文件网络
之因此将csv与excel分开说,首先须要扫盲下,csv属于特定格式的文本文件(使用逗号分隔),而excel是二进制文件。编程语言
csv能够直接使用文本编辑器打开,excel不行…编辑器
其实csv文件,彻底可使用open函数进行保存,只要你将每行数据都使用,分隔开便可。
另外,python自带csv库,能够很方便的操做与保存该数据ide
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存在安全性,这个要着重说下,看下图
Json文件
说了上面那么多,压轴的仍是Json!
首先相对于xml,如今更多的网站在数据传输中使用json格式,由于同等的字节下,json传输数据的效率要更高于xml。
对于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的理由:
Json格式是一种通用的数据类型
Python内置json模块,便于操做
json格式相似于python的dict
json的保存与读取极为方便
2.类型、语法说明
看到上图的Python与json对比关系,其实差别并不大,咱们只须要注意几点便可:
3.json的方法
即:带s的方法是数据类型间的转化str <--> dict,不带s的都是数据与文件的转化
4.实例说明
在演示前,咱们须要先定义一个初始化数据:
data = { "in_use": True, "info": { "name_cn": 'Python', "name_en": "BreezePython", }, "contents": ["Python", "Java", "Linux"] }
5.dumps() .loads()
''' 遇到问题没人解答?小编建立了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' import json json.dumps(data) >>> '{"in_use": true, "info": {"name_cn": "\\u6e05\\u98cePython", "name_en": "BreezePython"}, "contents": ["Python", "Java", "Linux"]}' #这里你们看到一个问题,中文异常,此时咱们须要添加参数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 # 先来看看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到?