小数据存储

我们在编写代码的时候,经常会涉及到数据存储的情况,如果是爬虫得到的大数据,我们会选择使用数据库,或者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存在安全性,这个要着重说下,看下图

pickle安全性

Json文件

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

首先相对于xml,现在更多的网站在数据传输中使用json格式,因为同等的字节下,json传输数据的效率要更高于xml。

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的理由:

  1. Json格式是一种通用的数据类型

  2. Python内置json模块,便于操作

  3. json格式类似于python的dict

  4. json的保存与读取极为方便

  5. 学习成本低,3分钟包教包会

2. 类型、语法说明

python与json数据类型

看到上图的Python与json对比关系,其实差异并不大,我们只需要注意几点即可:

  1. json的数据为key:value,且以逗号分隔,但注意json使用双引号包裹键值对

  2. 花括号中保存为对象,而方括号保存的是数组,不论python是list还是tuple,最终都会转化为数组

  3. json由于是js引申的数据类型,所以在布尔表达式与空值上,使用与python不同,需要注意

3. json的方法

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

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

4. 实例说明

在演示前,我们需要先定义一个初始化数据:

1data = {
2    "in_use": True,
3    "info": {
4        "name_cn": '清风Python',
5        "name_en": "BreezePython",
6    },
7    "contents": ["Python", "Java", "Linux"]
8
9}

5. .dumps() .loads()

 1import json2json.dumps(data)3>>> '{"in_use": true, "info": {"name_cn": "\\u6e05\\u98cePython", "name_en": "BreezePython"}, "contents": ["Python", "Java", "Linux"]}'4这里大家看到一个问题,中文异常,此时我们需要添加参数ensure_ascii=False5json.dumps(data,ensure_ascii=False)6>>> '{"in_use": true, "info": {"name_cn": "清风Python", "name_en": "BreezePython"}, "contents": ["Python", "Java", "Linux"]}'7# 当然我们可以美观的打印它8json_data = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '),ensure_ascii=False)9print(json_data)
10>>> {
11    "contents": [
12        "Python",
13        "Java",
14        "Linux"
15    ],
16    "in_use": true,
17    "info": {
18        "name_cn": "清风Python",
19        "name_en": "BreezePython"
20    }
21}
22
23# 了解了dumps,loads就比较简单了...
24json.loads(json_data)
25{'contents': ['Python', 'Java', 'Linux'], 'in_use': True, 'info': {'name_cn': '清风Python', 'name_en': 'BreezePython'}}

6. .dump() .load()

 1import json2# 先来看看dump将数据保存至文本3with open('data.json', 'w', encoding='utf-8') as f:4    json.dump(data, f, indent=4)5    # 同理我们还可以使用dumps完成写入操作6    # f.write(json.dumps(data, indent=4))78# 保存了文本,我们在通过load读取出来9with open('data.json', 'r', encoding='utf-8') as f:
10    data = json.load(f)
11    # 同理我们还可以使用loads完成读取操作
12    # data = json.loads(f.read())
13print(data)
14>>> {'in_use': True, 'info': {'name_cn': '清风Python', 'name_en': 'BreezePython'}, 'contents': ['Python', 'Java', 'Linux']}

看到这里,你是否发现,即便不会dump和load我们一样可以使用dumps和loads替换前两者,完成读写操作。三分钟学会了json的操作,并且买一送一附带学会了pickle的操作。你是否get到?

作者:华为云享开发者 清风Python

Python的小数据存储,用什么格式更有逼格?相关推荐

  1. python数据存储用什么_Python的小数据存储,用什么格式更有逼格?

    小数据存储 我们在编写代码的时候,经常会涉及到数据存储的情况,如果是爬虫得到的大数据,我们会选择使用数据库,或者excel存储.但如果只是一些小数据,或者说关联性较强且存在存储后复用的数据,我们该如何 ...

  2. python如何读取数据保存为新格式_Python Numpy中数据的常用保存与读取方法

    在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到二进制文件和保存数据到文本文件 ...

  3. 相识python 之小数据池 集合

    ⼀一. ⼩小数据池 在说⼩小数据池之前. 我们先看⼀一个概念念. 什什么是代码块: 根据提示我们从官⽅方⽂文档找到了了这样的说法: A Python program is constructed fr ...

  4. c#读取csv文件成DataTable,将DataTable数据存储为csv格式文件

    全栈工程师开发手册 (作者:栾鹏) c#教程全解 c#读取csv文件成DataTable,将DataTable数据存储为csv格式文件, 测试代码 static void Main() {//自定义数 ...

  5. Python爬取数据存储到本地文本文件

    前面说过Python爬取的数据可以存储到文件.关系型数据库.非关系型数据库.前面两篇文章没看的,可快速戳这里查看!https://mp.weixin.qq.com/s/A-qry4r3ymuCLXLB ...

  6. 基于Python操作将数据存储到本地文件

    点击蓝字 关注我们 前面说过Python爬取的数据可以存储到文件.关系型数据库.非关系型数据库.前面两篇文章没看的,可快速戳这里查看!<使用Python将数据存入SQLite3数据库> & ...

  7. Python爬虫_数据存储

    文章目录 HTML正文抽取 多媒体文件抽取 Email提醒 HTML正文抽取 HTML正文存储主要分为两种格式:JSON和CSV 储存为JSON 需求:抽取小说标题.章节.章节名称和链接 首先使用Re ...

  8. 21天学通python电子版-小数据池,深浅拷贝,集合+菜中菜

    小数据池,不同代码块的缓存机制,也称为小整数缓存机制,或者称为驻留机制等等,博主认为,只要你在网上查到的这些名字其实说的都是一个意思,叫什么因人而异. 那么到底什么是小数据池?他有什么作用呢? 前提条 ...

  9. python如何读取数据保存为新格式_Python -- 数据加载、存储与文件格式

    标签(空格分隔): Python 读入读出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据,利用Web API操作网络资源. 读写文本格式的数据 pandas提供了一 ...

最新文章

  1. Excel VBA林木冠幅、分枝胸径字符串的拆解
  2. 【Java 并发编程】线程锁机制 ( 锁的四种状态 | 无锁状态 | 偏向锁 | 轻量级锁 | 重量级锁 | 锁竞争 | 锁升级 )
  3. Promise.race 的原理
  4. Python面向对象基础示例_创建对象
  5. 全国计算机等级考试 备考,全国计算机等级考试经验:如何调整备考心态
  6. 性能测试之JMeter主页面布局
  7. vue学习-MVVM的实现原理
  8. 数据算法_JS数据结构与算法_排序和搜索算法
  9. 基于Matlab的同态滤波彩色图像增强算法研究
  10. iOS 性能优化那些繁杂琐碎的事儿
  11. 程序员自我介绍如何出彩?面试「万能模板」快拿走!
  12. pspice学习笔记(4)--各类符号详解
  13. ASP.net和ASP的区别
  14. 计算机组成原理知识点汇总(考研用)——第二章:数据的表示和运算
  15. 推荐一些Windows系统中好用的免费(开源)/收费的终端管理工具(命令行工具)
  16. js在字符串中间插入横线
  17. 解决Fabric报“FAILED to execute End-2-End Scenario“问题
  18. python属于什么部门_如何理解简历中部门名称的模式?
  19. android sdk 需要下载安装哪些
  20. 登堂入室之soc开发环境及硬件开发准备

热门文章

  1. 闪光灯slave是什么意思_闪光灯实战讲解 | 室内光线+闪光灯使用配合=完美光效...
  2. 天津理工大学c语言上机题库,天津理工大学C语言上机报告题目加答案.doc
  3. 编译vuejs html,VueJs(2)---VueJs开发环境的搭建和讲解index.html如何被渲染
  4. 12v电源正负极区分_解决冬天车辆无法启动的难题——车用应急启动电源选购要点及评测...
  5. “macOS Catalina下TeXstudio内置PDF阅读器无法正常显示中文”的解决办法
  6. c++利用初始化列表在类内部和类外部定义构造函数的区别
  7. bzoj2500幸福的道路 树形dp+单调队列
  8. tcpdump 命令快速实用参考手册
  9. 开发MIS系统需要的技术及其含义、作用
  10. 2016030207 - sql50题练习(脚本)