小数据存储

我们在编写代码的时候,经常会涉及到数据存储的情况,如果是爬虫得到的大数据,我们会选择使用数据库,或者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,因为二者的使用方式一毛一样啊!

三分钟学会Json1.

简介

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

至于推荐使用Json的理由:

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

Python内置json模块,便于操作

json格式类似于python的dict

json的保存与读取极为方便

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

类型、语法说明

python与json数据类型

python与json数据类型

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

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

Python内置json模块,便于操作

json格式类似于python的dict

json的保存与读取极为方便

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

json的方法

.dump():将python对象序列化到一个文件,是文本文件,相当于将序列化后的json字符写到一个文件

.load():从文件反序列表出python对象

json和pickle相同,都只有四个方法:

.dumps():将python对象编码为json的字符串

.loads():将字符串编码为一个python对象

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

实例

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

data = {

"in_use": True,

"info": {

"name_cn": '清风Python',

"name_en": "BreezePython",

},

"contents": ["Python", "Java", "Linux"]

}

.dumps() .loads()

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'}}

.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到?

The End

期待你关注我的公众号清风Python,如果你觉得不错,希望能动动手指转发给你身边的朋友们。

我的github地址:https://github.com/BreezePython

往期精彩回顾

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

  1. python 提高文件查询效率_Python 大量小文件存储提高效率的简单示例

    这篇文章主要为大家详细介绍了Python 大量小文件存储提高效率的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧 ...

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

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

  3. python在统计专业的应用_Python统计学一数据的概括性度量详解

    一.数据的概括性度量 1.统计学概括: 统计学是应用数学的一个分支,主要通过利用概率论建立数学模型,收集所观察系统的数据,进行量化的分析.总结,并进而进行推断和预测,为相关决策提供依据和参考.统计学主 ...

  4. python批量导入网页信息_python批量导入数据进Elasticsearch的实例

    ES在之前的博客已有介绍,提供很多接口,本文介绍如何使用python批量导入.ES官网上有较多说明文档,仔细研究并结合搜索引擎应该不难使用. 先给代码 #coding=utf-8 from datet ...

  5. python数据可视化源码_Python数据分析:数据可视化实战教程

    明确三个步骤: 确定问题,选择图形 转换数据,应用函数 参数设置,一目了然 下面,我们通过案例来进行演示: %matplotlib inline import numpy as np import p ...

  6. python获取mysql中的数据供js调用_python 读取mysql数据至csv文件中,并发送邮件

    test 代码: #coding:utf-8 ''' Created on 2019年2月18日 @author: Administrator ''' import ConfigParser impo ...

  7. python数据生成正态分布图_Python 与金融数据生成机器学习的特征数据

    记得 关注.分享.点在看 呀- 这样您就能持续收到优质的推送啦 接下来几期我们将使用机器学习方法帮助我们预测未来股票交易数据的走势.在此之前我们需要对数据进行预处理以供机器学习方法使用.这一期我们将以 ...

  8. python 生成html文件浏览器_python如何将数据生成html文件+浏览器中文显示乱码问题...

    需求:从msysql数据库查询数据,并生成html文件,后自动发送邮件(html格式),在网上找了许久,终于找到2种解决方法! 一.近来在网上采集数据,想把采集下来的数据整合成html的形式保存.以便 ...

  9. python中变量名存储在哪里_python – 如何在内部存储和映射变量名称?

    I think at a high level it can be done with a dict, where the key is the variable name (str?) and th ...

最新文章

  1. 【C#】C#创建Windows Service服务
  2. Windows下Unity5x创建和打开游戏工程
  3. Linux常见使用命令小结
  4. ASP无法上传大文件的解决方法
  5. 慎用stl中的erase的返回值
  6. Element-UI 表单验证规则rules 配置参数说明
  7. 特别困的学生(Extraordinarily Tired Students, ACM/ICPC Xi'an 2006, UVa12108)
  8. VS log4net引用错误的解决
  9. Firefox扩展IE Tab Plus内置功能导致浏览所有网页加载superfish.com脚本
  10. 未来计算机2020500,500kV变电站计算机监控系统的实施策略原稿
  11. 正则表达式中的?表示匹配前面的正则表达式0次或者1次
  12. Macbook:关于MacBook屏幕发绿发红特殊问题的解决方法
  13. 贴片钽电容的正负极性识别和贴片玻璃二极管的正负极性识别
  14. verticajdbc驱动_Vertica Reader
  15. 利用Python进行股票交易分析(三):A股量化交易策略的验证及数据分析。
  16. 《咸鱼分享》咸鱼在线TOP
  17. SpringCloud微服务-----skywalking链路追踪
  18. 1月16日服务器维护,1月16日服务器维护公告
  19. 电子--软件--电子(嵌入式)--学习之路断得漫长
  20. 阿里邮件推送服务发送邮件

热门文章

  1. 如何用纯 CSS 创作一个文本淡入淡出的 loader 动画
  2. 阅读react-redux源码(七) - 实现一个react-redux
  3. freopen()函数在ACM中的使用
  4. 课程学习:程序设计与算法
  5. java 与 c#的 中 字符串比较“==”与“equals”的差异
  6. javaweb 学习资源
  7. 为什么django+mongo在windows上session能够获取到,同样的程序在linux上就会报session的变量错误,keyerror?...
  8. jquery下 选择器整理
  9. HDU-1518 Square dfs+剪枝
  10. php 字符串与数字相加,注意!PHP中字符串与数字的比较