python爬取之json、pickle与shelve库的深入讲解

前言

在使用Python进行网络编程或者爬取一些自己感兴趣的东西时,总避免不了进行一些数据传输、存取等问题,Python的文件对象以及其他扩展库,已经解决了很多关于文本和二进制数据存取的问题,比如网页内容、图片&音视频等多媒体内容,但这些数据基本是最终的数据形态存储,有没有办法可以存储Python本身的一些对象数据,后续在使用的时候,再直接加载为Python对象即可,本文便讲解下常用的Python对象数据存取、传输解决方案,即pickle、shelve、json。

内容比较基础,也比较简单,但也是必须好好掌握的知识点,因为其潜在的应用场景太广

一、pickle

pickle库提供了一种将Python对象(所有对象)本地化存储的解决方案,后续还可以从这些文件内重新加载,加载后又是Python标准的对象数据,可以用Python直接使用。

pickle有以下特点:

  1. 可以存取所有类型Python对象,并本地化到一个文件内
  2. 每个文件内只能存储一个Python对象

1.1 临时转换

可以将Python对象临时转化为pickle序列(存储在变量内而不是文件内),后续再进行加载使用。

import pickle
a=[1,2,3,4]
#以下将a转化为pickle序列
p_a=pickle.dumps(a)

#以下将pickle序列转化为Python对象
a=pickle.loads(p_a)

1.2 永久化存取

可以将Python对象存储到本地文件内,方便下次取出继续使用。

import pickle
a=[1,2,3,4]
f=open('file.pkl','wb')

#以下将a转化为pickle序列并存储到本地文件
p_a=pickle.dump(a,f)

f=open('file.pkl','rb')
#以下将存储在本地文件内的pickle序列转化为Python对象
a=pickle.load(f)

f.close()

以上,首先打开一个文件,注意,因为pickle序列是二进制编码格式,所以文件模式需要有'b'

然后将Python对象序列化并存储到本地文件

后续可通过加载该文件,将里面存储的数据重新加载为Python对象

二、shelve

shelve库相当于基于pickle的优化,因为pickle单文件只能存储单个Python对象,并且每次存取都需要使用dump和load,比较繁琐,所以,该库主要做了以下优化:

  1. 创建了一个轻量级的键值对数据库,支持一个文件内存储多个Python对象
  2. 不需要每次都load,对Python数据的存取,变成了标准的字典访问

以下是演示代码:

import shelve
db=shelve.open('obj_db')
class A:...
a=[1,2,3];b=dict(name='dennis');c=A
db['a']=a
db['b']=b
db['c']=c

db['a']
db['b']
db['c']

db.close()

以上代码,首先使用shelve的open方法创建一个db,可以指定db文件的存储地址

然后便可以像使用字典一样,用来在该键值对的db内存储Python对象(任何Python对象)

然后可像字典访问一样,重新取出之前已经存储的对象,最后,别忘了战术性关闭db

如果想遍历或内省某db内存量键值,该db也有keys()和values()方法,也支持Python的迭代协议

所以,相较于pickle来说,会方便和强大很多

三、json

json是进行网络数据传输应用最为广泛的数据格式,其可以将Python指定的一些数据对象转化为json字符串,便于进行存储和网络传输,并将该json序列化的字符串重新转变为Python对象。

大体过程为Python→JSON→Python,所以可以进行CS数据传输和通信。

以下为json和Python数据转换映射表:

JSON Python
object dict
array list
string str
number (int) int
number (real) float
true,false Ture,False
null None

3.1 临时转换

可以将Python对象临时转化为json字符串并赋值给某变量,待后续再对其转化为Python对象

一般用于网络传输,尤其是接口调用时数据传输。

import json
mylist=[1,2,3]
mydict={
 'name':dennis
}
#临时转换
a=json.dumps(mydict)
b=json.dumps(mylist)
#将json字符串重新转为Python对象
mylist=json.loads(b)
mydict=json.loads(a)

3.2 永久化存取

可以将Python对象转换为json字符串并永久性存储在本地文件内,便于后续重新加载使用。

import json
mylist=[1,2,3]
mydict={
 'name':dennis
}

#将Python对象转化为json字符串,同时存储到file内
with open('myjson.json','w') as f:
 json.dump(mydict,f)

#将存储在文件内的json字符串加载并转化为Python对象
with open('myjson.json','r') as f:
 json.load(f)

总结

到此这篇关于python爬取之json、pickle与shelve库的文章就介绍到这了,更多相关python json、pickle与shelve库内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python pickle 和 shelve模块的用法

    1.pickle 写: 以写方式打开一个文件描述符,调用pickle.dump把对象写进去 复制代码 代码如下: dn = {'baidu':'www.baidu.com','qq':'www.qq.com','360':'www.360.cn'} name = ['mayun','mahuateng','liyanhong'] f = open(r'C:\a.txt','w') pickle.dump(dn,f)      ##写一个对象 pickle.dump(name,f)  ##再写一个

  • python实现通过shelve修改对象实例

    本文实例讲述了python实现通过shelve修改对象的方法,分享给大家供大家参考. 具体实现方法如下: import shelve she = shelve.open('try.she','c') for c in 'spam': she[c] = {c:23} for c in she.keys(): print c,she[c] she.close() she = shelve.open('try.she','c') print she['p'] she['p']['p'] = 42 #这

  • Python操作json数据的一个简单例子

    更多的信息,可以参考python内部的json文档: python>>> help(json) 或者官方文档: http://docs.python.org/library/json.html#module-json. 下面给出一个使用python解析json的简单例子: 复制代码 代码如下: #!/usr/bin/python import json #Function:Analyze json script #Json is a script can descript data st

  • Python使用shelve模块实现简单数据存储的方法

    本文实例讲述了Python使用shelve模块实现简单数据存储的方法.分享给大家供大家参考.具体分析如下: Python的shelve模块提供了一种简单的数据存储方案,以dict(字典)的形式来操作数据. #!/usr/bin/python import sys, shelve def store_person(db): """ Query user for data and store it in the shelf object """ pi

  • python3 shelve模块的详解

    python3 shelve模块的详解 一.简介 在python3中我们使用json或者pickle持久化数据,能dump多次,但只能load一次,因为先前的数据已经被后面dump的数据覆盖掉了.如果我们想要实现dump和load多次,可以使用shelve模块.shelve模块可以持久化所有pickle所支持的数据类型. 二.持久化数据 1.数据持久化 import shelve import datetime info = {'name': 'bigberg', 'age': 22} name

  • 使用Python解析JSON数据的基本方法

    Python的json模块提供了一种很简单的方式来编码和解码JSON数据. 其中两个主要的函数是 json.dumps() 和 json.loads() , 要比其他序列化函数库如pickle的接口少得多. 下面演示如何将一个Python数据结构转换为JSON: import json data = { 'name' : 'ACME', 'shares' : 100, 'price' : 542.23 } json_str = json.dumps(data) 下面演示如何将一个JSON编码的字

  • Python3中的json模块使用详解

    1. 概述 JSON (JavaScript Object Notation)是一种使用广泛的轻量数据格式. Python标准库中的json模块提供了JSON数据的处理功能. Python中一种非常常用的基本数据结构就是字典(Dictionary). 它的典型结构如下: d = { 'a': 123, 'b': { 'x': ['A', 'B', 'C'] } } 而JSON的结构如下: { "a": 123, "b": { "x": [&quo

  • 简单介绍Python中的JSON模块

    (一)什么是json: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集.JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等

  • 详解Python之数据序列化(json、pickle、shelve)

    一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Python也是一样.很多时候我们会有这样的需求: 把内存中的各种数据类型的数据通过网络传送给其它机器或客户端: 把内存中的各种数据类型的数据保存到本地磁盘持久化: 2.数据格式 如果要将一个系统内的数据通过网络传输给其它系统或客户端,我们通常都需要先把这些数据转化为字符串或字节串,而且需要规定一种统一的数据格式才能让数据接收端正确解析并理解这些数据的含义.XML 是早期被

  • 举例简单讲解Python中的数据存储模块shelve的用法

    shelve类似于一个key-value数据库,可以很方便的用来保存Python的内存对象,其内部使用pickle来序列化数据,简单来说,使用者可以将一个列表.字典.或者用户自定义的类实例保存到shelve中,下次需要用的时候直接取出来,就是一个Python内存对象,不需要像传统数据库一样,先取出数据,然后用这些数据重新构造一遍所需要的对象.下面是简单示例: import shelve def test_shelve(): # open 返回一个Shelf类的实例 # # 参数flag的取值范围

随机推荐