zoukankan      html  css  js  c++  java
  • 2018年4月26日笔记

    • 内置模块:hashlib

    Python的hashlib提供了常见的摘要算法,如md5,sha1, sha224, sha256, sha384, sha512等等,其中md5最为常用。

    什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。md5算法得到的就是一个32位的16进制字符串。

    一般用法如下:(python3环境中)

     1 import hashlib
     2 
     3 # python3
     4 m1 = hashlib.md5()
     5 m2 = hashlib.md5()
     6 s1 = "abc123"
     7 s2 = bytes(s1.encode("utf8"))       # 将s1从string类型转为bytes类型
     8 print(s2)
     9 print(type(s2))
    10 
    11 m1.update(s1.encode("utf8"))
    12 print(m1.hexdigest())
    13 m2.update(s2)                       # 分别对s1和s2进行md5算法,得到的结果相同
    14 print(m2.hexdigest())
    b'abc123'
    <class 'bytes'>
    e99a18c428cb38d5f260853678922e03
    e99a18c428cb38d5f260853678922e03

    python2与python3的区别在于:python2无需指定编码方式

    1 import hashlib
    2 
    3 # python3
    4 print(hashlib.md5("a12".encode("utf8")).hexdigest())
    5 
    6 # python2
    7 print(hashlib.md5("a12").hexdigest())           # python2不同于python3,无需指定编码方式

    注意:如果同一个hash对象重复调用该方法,则m.update(a); m.update(b) 等效于 m.update(a+b)

    例如:对字符串"a12"进行md5算法,有以下3种写法,得到的结果是一样的

     1 import hashlib
     2 
     3 # 方法一
     4 m3 = hashlib.md5()
     5 m3.update("a12".encode("utf-8"))
     6 print(m3.hexdigest())
     7 
     8 # 方法二
     9 print(hashlib.md5("a12".encode("utf8")).hexdigest())
    10 
    11 # 方法三
    12 m3 = hashlib.md5(b"a")              # 字符串前加b表示为二进制字符串,无需再指定编码方式
    13 m3.update("12".encode("utf8"))
    14 print(m3.hexdigest())
    15 
    16 # 备注:字符串前加u,表示字符串以Unicode格式进行编码,即unicode字符串
    17 # 备注:字符串前加b,表示为二进制字符串
    18 # 备注:字符串前加r,声明该字符串为普通字符串,即不含转义字符 
     
     之类的
    ed20a959d410ccd843d9e1dfcee04228
    ed20a959d410ccd843d9e1dfcee04228
    ed20a959d410ccd843d9e1dfcee04228
    • 内置模块:StringIO ,  BytesIO

    StringIO模块:主要用于在内存中读写字符串数据(string)

    BytesIO模块:实现了在内存中读写二进制数据(bytes)

    StringIO经常被用来作为字符串的缓存,应为StringIO有个好处,他的有些接口和文件操作是一致的,也就是说用同样的代码,可以同时当成文件操作或者StringIO操作。

    StringIO类中常用的方法有如下这些:

    1. read
    2. readline
    3. readlines
    4. write
    5. writeline
    6. getvalue
    7. truncate
    8. tell
    9. seek
    10. close
    11. isatty
    12. flush

    ----------------------

    s.read([n])

    参数n限定读取长度,int类型;缺省状态为从当前读写位置读取对象s中存储的所有数据。读取结束后,读写位置被移动。

    ----------------------

    s.readline([length])

    参数length限定读取的结束位置,int类型,缺省状态为None:从当前读写位置读取至下一个以“ ”为结束符的当前行。读写位置被移动。

    ----------------------

    s.readlines([sizehint])

    参数sizehint为int类型,缺省状态为读取所有行并作为列表返回,除此之外从当前读写位置读取至下一个以“ ”为结束符的当前行。读写位置被移动。

    ----------------------

    s.write(s)

    从读写位置将参数s写入给对象s。参数s为str或unicode类型。读写位置被移动。

    ----------------------

    s.writelines(list)

    从读写位置将list写入给对象s。参数list为一个列表,列表的成员为str或unicode类型。读写位置被移动。

    ----------------------

    s.getvalue()

    此函数没有参数,返回对象s中的所有数据。

    ----------------------

    s.truncate([size])

    从读写位置起切断数据,参数size限定裁剪长度,缺省值为None。

    ----------------------

    s.tell()

    返回当前读写位置。

    ----------------------

    s.seek(pos[,mode])

    移动当前读写位置至pos处,可选参数mode为0时将读写位置移动至pos处,为1时将读写位置从当前位置起向后移动pos个长度,为2时将读写位置置于末尾处再向后移动pos个长度;默认为0。

    ----------------------

    s.close()

    释放缓冲区,执行此函数后,数据将被释放,也不可再进行操作。

    ----------------------

    s.isatty()

    此函数总是返回0。不论StringIO对象是否已被close()。

    ----------------------

    s.flush()

    刷新内部缓冲区。

    ----------------------

     1 from io import StringIO, BytesIO
     2 
     3 s = StringIO()
     4 s.write("Hello")
     5 s.write("
    ")
     6 s.write(r"
    ")
     7 s.write("
    world")
     8 print(s.getvalue())         # 获取内存中的数据
     9 print(len(s.getvalue()))
    10 
    11 s.truncate(10)         # 获取内存中的数据,0表示清空
    12 print("截取上文前10个字符为:
    {0}".format(s.getvalue()))
    Hello
    
    
    world
    14
    截取上文前10个字符为:
    Hello
    
    
    w

    Python3 中,内存读写字符串数据用StringIO,内存读写二进制数据用BytesIO,bytes和str转换用encode和decode

    1 from io import StringIO, BytesIO
    2 
    3 a = "中文"
    4 b = a.encode("utf8")
    5 print("{0}
    原始内容的类型为:{1}".format(a, type(a)))
    6 print("
    {0}
    编码后内容的类型为:{1}".format(b, type(b)))
    7 
    8 c = b.decode("utf8")
    9 print("
    {0}
    解码后内显示为原始内容,其类型为:{1}".format(c, type(c)))
    中文
    原始内容的类型为:<class 'str'>
    
    b'xe4xb8xadxe6x96x87'
    编码后内容的类型为:<class 'bytes'>
    
    中文
    解码后内显示为原始内容,其类型为:<class 'str'>
    • 内置模块:json

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式

    json最广泛的应用是作为AJAX中web服务器和客户端通讯的数据格式,也常用语http请求中,so it's very import to learn JSON

    json模块有  dumps、loads、dump、load四种方法,带s是处理字符串的,不带s是处理文件的

    loads : str -> PythonObject

    dumps : PythonObject -> str

    load : file -> PythonObject

    dump : PythonObject -> file

    Python对象 与 JSON对象 的对应关系:

        +-------------------+---------------+
        | Python            | JSON          |
        +===================+===============+
        | dict              | object        |
        +-------------------+---------------+
        | list, tuple       | array         |
        +-------------------+---------------+
        | str               | string        |
        +-------------------+---------------+
        | int, float        | number        |
        +-------------------+---------------+
        | True              | true          |
        +-------------------+---------------+
        | False             | false         |
        +-------------------+---------------+
        | None              | null          |
        +-------------------+---------------+

    loads()和dumps()用法示例:

     1 import json
     2 
     3 obj = dict({"a":1, "b":2})
     4 
     5 t1 = '[{"a":1, "aa":11}, {"b":2}, {"ccc":333}]' # json串内部一般用建议用 "双引号",也能用 '单引号'
     6 t2 = '''{"aa":11, "b":2}'''                     # json串外部不能用 "双引号"
     7 
     8 t11 = json.loads(t1)            # 将其转为list
     9 print(t11)
    10 print(type(t11))
    11 
    12 t22 = json.loads(t2)            # 将其转为dict
    13 print(t22)
    14 print(type(t22))
    15 print("
    ")
    16 
    17 print("*"*20)
    18 print("使用dumps() 转为 str")
    19 x = json.dumps(t22)
    20 print(type(x))
    21 print("再用loads() 转回原对象obj")
    22 print(type(json.loads(x)))
    23 
    24 # dumps()和str()都将能obj转为str,但dumps()可逆
    25 
    26 print("*"*20)
    27 print("使用str() 强制转化为 str")
    28 y = str(t22)
    29 print(type(y))
    30 print("无法使用dict() 强制转回原对象obj")
    31 # print(dict(y))
    [{'a': 1, 'aa': 11}, {'b': 2}, {'ccc': 333}]
    <class 'list'>
    {'aa': 11, 'b': 2}
    <class 'dict'>
    
    
    ********************
    使用dumps() 转为 str
    <class 'str'>
    再用loads() 转回原对象obj
    <class 'dict'>
    ********************
    使用str() 强制转化为 str
    <class 'str'>
    无法使用dict() 强制转回原对象obj

    load()和dump()用法示例:

     1 import json
     2 import codecs
     3 
     4 test = {"a": 1, "b": 2}
     5 with codecs.open("1.txt", "w") as f:
     6     json.dump(test, f)
     7 with codecs.open("1.txt", "r") as f:
     8     obj = json.load(f)
     9     print(obj)
    10     print(type(obj))
    {'a': 1, 'b': 2}
    <class 'dict'>
  • 相关阅读:
    《计算机网络 自顶向下方法》整理(二)应用层
    《计算机网络 自顶向下方法》整理(一)计算机网络和因特网
    《深入理解C#》整理10-使用async/await进行异步编程
    STM32 HAL库之串口详细篇
    .Net微服务实战之负载均衡(下)
    面试官:来,年轻人!请手撸5种常见限流算法!
    工具用的好,下班回家早!iTerm2使用技巧指北!
    Java编程规范(命名规则)
    Go语言快速安装手册
    Educational Codeforces Round 6 620E. New Year Tree(DFS序+线段树)
  • 原文地址:https://www.cnblogs.com/karl-python/p/8965630.html
Copyright © 2011-2022 走看看