python数据存储用什么_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存在安全性,这个要着重说下,看下图

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

往期精彩回顾

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电气与计算机学院院长论坛报告,自动化学院分论坛第十、十一次专家报告会圆满成功...

2016年10月24日下午两点半,第十三届北航研究生学术论坛自动化学院分论坛第十、十一次专家报告会在新主楼D座639举行。本次报告会由自动化学院的董希旺老师邀请到了加拿大维多利亚大学电子与计算机工程系副研究员何建平博士和加拿大阿尔伯塔大学电气与计算机工程系的…

媒资管理系统的应用与发展

电视台作为一个生产单位,其主要产品为音频和视频节目,同时包含了与其相关的文稿,如新闻稿、解说词、拍摄脚本等。视音频节目和素材作为资产具有很高的价值,甚至超过设备等固定的有形资产,其中很多资料独一无二、非常珍…

计算机教师教学心得体会,信息技术教师教学的一点体会

放飞学生的梦想随着素质教育的不断深入,作为教师,我们认识到,教育不仅仅是追求百分之多少的升学率,而是追求每个学生生动、活泼、主动的发展、不仅仅是汇报时的总结、评比时的数据,而是教师与学生共度的生命历程&#…

在ne中分析贱谈.net中简体转繁体

最近到了台企,什么都要用繁体的。 开发中也遇到了简繁体转换的问题。 这里和朋友们分享一下用.net实现简繁体转换的经验。 我还是直接贴例子在说明一下吧: //Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; us…

localdatetime转化为date_LocalDateTime用法(jdk1.8 )

前言最近看别人项目源码,发现Java8新的日期时间API很方便强大,所以转载该入门介绍博客,记录一下。使用新时间日期API的必要性在java8以前,或许:当你在做有关时间日期的操作时,你会想到用Date;当你在做日期、…

计算机里的东西不小心删除如何恢复,原先在电脑界面上的文件不小心删除了怎么恢复,谢谢了...

那就得看看删除的方式是哪种的了,如果是普通删除的文件,可以打开回收站查看是否有想文件的存在,如果有的话进行还原的操作,如果未发现的话,可以参考下述的恢复教程进行文件的恢复工作:步骤一:到…

我的处女作《设计模式之禅》——前言

终于可以写前言了,这说明本书已经基本完成,可以长嘘一口气了。 为什么写这本书 为什么写这本书?今年5月份,我在JavaEye上发了一个帖子,其中提到自己已经工作9年了,总觉得这9年不应该就这么荒废了&#xff0…

bc汇编指令用法_汇编指令imul 与 操作数

最近在练《天书夜读》,在2.3 C语言的数组与结构 章节里有如下代码(注:我用的是VS2005):--- e:\practice\visual studio 2005\projects\reverseme\reverseme\reverseme.c ----// ReverseMe.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h&…

css设置导航栏背景颜色,更改bootstrap导航栏背景颜色和字体颜色

3 个答案:答案 0 :(得分:46)我使用以下CSS成功设置了Bootstrap导航栏的样式。你也没有在CSS中定义任何字体,这就是字体没有改变的原因。可以在here找到使用此CSS的网站。.navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav…

UML 图例

对UML不是很了解,简单地了解一下UML设计中有的图例及基本作用。首先对UML中的各个图的功用做一个简单介绍: 1、用例图 描述角色以及角色与用例之间的连接关系。说明的是谁要使用系统,以及他们使用该系统可以做些什么。一个用例图包含了多个模…

python计数器函数_Python计数器Counter

老男孩教育的PYTHON自动化开发课程自2013年第1期到现在已经走到了第12期,2年半的时间里,我们每一期都在对课程细节进行不同程度的优化,课程总时长也从最开始的2个月延长至第12期的五到六月,更新内容足足翻了一倍多,我们…

从物理服务器拷贝文件到容器,docker容器与物理机的文件传输—docker cp命令

ocker cp :用于容器与主机之间的数据拷贝。语法docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATHOPTIONS说明:-L :保持源目标中的链接实例将主机./vern目录拷贝到容器hssme的/home/cloudera目录下。docker c…

idea代码样式模板_阿里p3c(代码规范,eclipse插件、模版,idea插件)

阿里p3c一、说明代码规范检查插件p3c,是根据《阿里巴巴Java开发手册》转化而成的自动化插件。(高级黑:P-3C“Orion”,反潜巡逻机,阿里大概取p3c先进,监测,发现潜在问题的意思)二、源码地址下载下来之后为&a…

ajax require 用法,require.js使用方法整理

一、使用原因1、实现js异步加载,避免网页失去响应;2、管理模块之间的依赖性,便于代码编写和维护;二、使用说明1.加载require.js加载这个文件,也可能造成网页失去响应。解决办法有两个,一个是把它放在网页底…

根据数据库中的值用js设置RadioButtonList选中与否

function setcheck(id,ddd)//id表示控件ID号,ddd表示值{var radiolist id; for(var i0;i<document.getElementById(radiolist).rows.length;i) { for(var x0;x<document.getElementById(radiolist).rows[i].cells.length;x) { if(document.getElementById…

服务器与本地文件共享文件夹,云服务器对本地服务器共享文件夹

云服务器对本地服务器共享文件夹 内容精选换一换当您成功创建私有镜像后&#xff0c;镜像的状态为“正常”&#xff0c;您可以使用该镜像创建服务器实例或云硬盘&#xff0c;也可以将镜像共享给其他帐号&#xff0c;或者复制镜像到其他区域。私有镜像的生命周期如图1所示。远程…

rocksdb原理_教你玩转MyRocks/RocksDB—STATISTICS与后台线程篇

0. Intro在facebook的MySQL版本(以下称为MyRocks)中&#xff0c;RocksDB是可选的存储引擎。相比于InnoDB引擎&#xff0c;RocksDB的一个重要的优势是它使用更少的磁盘空间。在生产系统中&#xff0c;特别是用户数在亿级以上的互联网应用&#xff0c;磁盘空间是其中比较大的成本…

有效需求分析的基本流程

今天工作不算太忙&#xff0c;本来下午是要开会&#xff0c;由于这周的idea比较少&#xff0c;就把AT会议移到下周一起开&#xff0c;所有今天没有什么忙的&#xff0c;只是开了简单的idea评审会议&#xff0c;同时对组内的一些问题进行简单的整理&#xff0c;本来想整理出好的…

PHP Socket 编程

让我们以一个简单的例子开始---一个接收输入字符串,处理并返回这个字符串到客户端的TCP服务.下面是相应的代码: PHP 代码: -------------------------------------------------------------------------------- <? // 设置一些基本的变量 $host "192.168.1.99";…

服务器可否替代手机芯片,基于ARM的处理器能取代桌面处理器吗?

科技的发展速度太快了&#xff0c;从手机进入智能时代开始&#xff0c;手机处理器的速度也越来越快了&#xff0c;以前人们办公都是在电脑端进行的&#xff0c;随着手机的功能越来越多&#xff0c;手机处理器速度越来越快&#xff0c;已经有一小部分的工作可以在手机上完成了。…