zoukankan      html  css  js  c++  java
  • python shelve模块

    import shelve
    import datetime
    
    d = shelve.open('shelve_test')
    '''写入文件'''
    info = {'age': 22, 'job': 'IT'}
    name = ['Jack', 'Rose']
    d['name'] = name
    d['info'] = info
    d['data'] = datetime.datetime.now()
    d.close()
    '''读取文件'''
    d = shelve.open('shelve_test')
    print(d.get('name'))
    print(d.get('info'))
    print(d.get('date'))
    d.close()
    

     shelve类似于一个key-value数据库,可以很方便的用来保存Python的内存对象,其内部使用pickle来序列化数据,简单来说,使用者可以将一个列表、字典、或者用户自定义的类实例保存到shelve中,下次需要用的时候直接取出来,就是一个Python内存对象,不需要像传统数据库一样,先取出数据,然后用这些数据重新构造一遍所需要的对象。

     可以看出shelve模块和json对文件的操作是很像的,但是保存文件时有三个文件,如图:

    具体不用管这三个文件的格式,正常的读写就行了。


    模块名称描述提供的api
    json 用于实现Python数据类型与通用(json)字符串之间的转换 dumps()、dump()、loads()、load()
    pickle 用于实现Python数据类型与Python特定二进制格式之间的转换 dumps()、dump()、loads()、load()
    shelve 专门用于将Python数据类型的持久化到磁盘,shelf是一个类似dict的对象,操作十分便捷 open()


    json模块:
    下面通过一些示例来学习:
    首先我们来看json的dumps和loads方法
    1
    2
    3
    4
    5
    6
    s1={"k1":"v1"}
    st=json.dumps(s1)
    print(st,type(st))
    s='{"k1":"v1"}'
    dic=json.loads(s)
    print(dic,type(dic))

    输出结果为:

    1
    2
    {"k1""v1"} <class 'str'>
    {'k1''v1'} <class 'dict'>

    可以看出json的dumps方法处理数据时会将数据转换为字符类型,loads则会重新还原它的类型。

    再来看json的dump和load方法,通过示例来了解:

    1
    2
    3
    4
    li=[11,22,33]
    li=json.dump(li,open('db','w'))
    li=json.load(open('db','r'))
    print(li,type(li))

    即Json的load要接open的文件对象,dump同理。

    Json模块dumps、loads、load、dump的区别:

    load,dump可加载外部文件,处理文件的数据,dumps,loads主要处理内存中的数据

     

    pickle模块:

    下面我们来看pickle的dumps和loads方法,通过示例我们来了解:

    1
    2
    3
    4
    5
    6
    import pickle
    i=[11,22,33]
    r=pickle.dumps(li)
    print(r)
    result=pickle.loads(r)
    print(result)

     结果为:

    1
    2
    b'x80x03]qx00(Kx0bKx16K!e.'
    [112233]

    pickle的dupms方法会将数据存为pickle特有的数据类型 

    再看pickle的dump和load方法,通过示例我们来了解:

    1
    2
    3
    4
    5
    import pickle
    i=[11,22,33]
    pickle.dump(i,open('db','wb'))
    result=pickle.load(open('db','rb'))
    print(result)

    需要注意的是dump文件或者load文件是需要使用二进制。

  • 相关阅读:
    hihoCoder 1308:搜索二·骑士问题(BFS预处理)
    BZOJ 1085:[SCOI2005]骑士精神(A*算法)
    HDU 6181:Two Paths(A* + SPFA)
    Linux常用命令之用户权限管理chmod、chown、chgrp、umask命令讲解
    Linux常用命令之cp、mv、rm、cat、more、head、tail、ln命令讲解
    Linux常用命令之ls、cd、pwd、mkdir命令讲解
    第一次在虚拟机启动我们的Linux系统
    Linux学习环境搭建
    centos7重启apache、nginx、mysql、php-fpm命令
    返回一条最近一次cURL操作明确的文本的错误信息。
  • 原文地址:https://www.cnblogs.com/gilgamesh-hjb/p/7327456.html
Copyright © 2011-2022 走看看