美文网首页
python 学习笔记12 (json、hashlib、Stri

python 学习笔记12 (json、hashlib、Stri

作者: 我是帅气的石头 | 来源:发表于2018-04-27 22:40 被阅读0次

    josn模块

    Json 模块提供了四个方法: dumps、dump、loads、load
    dumps:无文件操作 dump:序列化+写入文件
    dumps只完成了序列化为str
    dump必须传文件描述符,将序列化的str保存到文件中
    1. json序列化方法:dumps和dump
    (1)json.dumps()将”obj“转换为JSON格式的字符串
    dumps可以格式化所有的基本数据类型为字符串

    >>> json.dumps([])        # dumps可以格式化所有的基本数据类型为字符串
    '[]'
    >>> json.dumps(1)  #数字
    '1'
    >>> json.dumps('1')   #字符串
    '"1"'
    >>> dict = {"name":"tom","age":23}
    >>> json.dumps(dict)  #字典
    '{"age": 23, "name": "tom"}'
    >>>
    

    写入到文件中:

    import json
    
    a = {"name":"Tom","age":23}
    with open("test.json","w",encoding="utf-8") as f:
        f.write(json.dumps(a,indent=4))    #将a转化为json格式的字符串,然后写入到文件中: indent:以4个空格缩进,输出阅读友好型
    

    查看test.json文件:

    image.png
    (2)json.dump()完成序列化为str ,并将str写入文件文件中。其中文件描述符是必须的。
    import json
    
    a = {"name":"Tom","age":23,"sex":1}
    with open("test.json","w",encoding="utf-8") as f:
        json.dump(a,f,indent=4)      #f是必须的
    

    2. json反序列化方法

          loads:无文件操作              load: 读文件+反序列化
    

    loads 只完成了饭序列化,
    load 只接收文件描述符,完成了读取文件和反序列化

    >>> import json
    >>> json.loads('{"name":"TOM","age":18}')
    {'name': 'TOM', 'age': 18}
    >>>
    

    注意一下例子:反序列化json格式的str之后,类型会有所不同,字典的字符串则为字典,数组的字符串则为数组


    image.png
    image.png

    json.load()的文件操作:

    import json
    with open("test.json","r",encoding='utf-8') as f:
        aa = json.loads(f.read())   ##f.rand()先读出文件内容
        f.seek(0)
        bb = json.load(f)   ##json.load()  直接对文件符操作
    
    print(aa)
    print(bb)
    

    运行结果 :

    {'age': 23, 'name': 'Tom', 'sex': 1}
    {'age': 23, 'name': 'Tom', 'sex': 1}
    

    hashlib 加密模块

    以常见的MD5为列:

    import hashlib
    md5=hashlib.md5()
    str = 'my name admin'
    md5.update(str.encode('utf-8'))
    print(md5.hexdigest())
    
    

    运行的结果:

    a4542e9bbf0be58b006ac63508fe36f5
    

    如果数据量很大,可以分块多次调用update最后计算的结果是一样的:

    import hashlib
    
    md5 = hashlib.md5()
    md5.update('how to use md5 in '.encode('utf-8'))
    md5.update('python hashlib?'.encode('utf-8'))
    print(md5.hexdigest())
    

    如果需要加上加密字符:

    import hashlib
    md5=hashlib.md5('passwor'.encode('utf-8'))  #附加加密字符串
    str = 'my name admin'
    md5.update(str.encode('utf-8'))
    print(md5.hexdigest())
    

    StringIO模块 和BytesIO模块

    (1)StringIO模块
    在平时开发过程中,有些时候我们可能不需要写在文件中,我们可以直接通过StringIO模块直接写入到系统内存中,如果不用了,可以直接清除就可以了。StringIO主要是用来在内存中写入字符串的,及字符串的缓存。他的接口和文件的接口是一致的,基本所有关于文件的方法都可以常用,有几个特殊的:
    s.getvalue() 此函数没有参数,无论读写位置在哪里,都能够返回对象s中所有的数据。
    s.struncate(0) 参数0,表示清空所有写入的内容。
    s.flush() 刷新内部缓冲区。

    from io import StringIO
    f = StringIO()
    f.write("hello world")
    print(f.getvalue())
    f.write('hehehhe')
    print(f.getvalue())
    

    运行的结果:

    hello world
    hello worldhehehhe
    

    要读取StringIO,可以用一个str初始化StringIO,然后,像读取文件一样读取:

    from io import StringIO
    f=StringIO('Hello!\nHi!\nGoodbye!')
    while True:
        s = f.readline()   #读取文件的方法
        if s =='':
            break
        print(s.strip())
    

    运行结果:

    Hello!
    Hi!
    Goodbye!
    

    (2)BytesIO模块
    StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO。
    BytesIO实现了在内存中读写bytes:

    from io import BytesIO
    f=BytesIO()
    f.write('中文'.encode('utf-8'))
    print(f.getvalue())
    

    运行结果:

    b'\xe4\xb8\xad\xe6\x96\x87'
    

    相关文章

      网友评论

          本文标题:python 学习笔记12 (json、hashlib、Stri

          本文链接:https://www.haomeiwen.com/subject/fklblftx.html