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,声明该字符串为普通字符串,即不含转义字符 \n \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:从当前读写位置读取至下一个以“\n”为结束符的当前行。读写位置被移动。

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

s.readlines([sizehint])

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

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

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("\n")
 6 s.write(r"\n")
 7 s.write("\nworld")
 8 print(s.getvalue())         # 获取内存中的数据
 9 print(len(s.getvalue()))
10
11 s.truncate(10)         # 获取内存中的数据,0表示清空
12 print("截取上文前10个字符为:\n{0}".format(s.getvalue()))
Hello
\n
world
14
截取上文前10个字符为:
Hello
\n
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}\n原始内容的类型为:{1}".format(a, type(a)))
6 print("\n{0}\n编码后内容的类型为:{1}".format(b, type(b)))
7
8 c = b.decode("utf8")
9 print("\n{0}\n解码后内显示为原始内容,其类型为:{1}".format(c, type(c)))
中文
原始内容的类型为:<class ‘str‘>

b‘\xe4\xb8\xad\xe6\x96\x87‘
编码后内容的类型为:<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("\n")
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‘>

原文地址:https://www.cnblogs.com/karl-python/p/8965630.html

时间: 2024-10-06 11:48:36

2018年4月26日笔记的相关文章

2018年5月8日笔记

CentOS 7上安装mysql # CentOS 7 安装mysql 1. 检测系统是否自带安装 mysql rpm -qa | grep mysql 2. 若已安装,可以进行卸载 rpm -e mysql //普通删除模式 rpm -e --nodeps mysql //强力删除模式,若普通删除时提示存在依赖文件,则进行强力删除 3. 安装mysql # centOS 7 yum install mariadb-server mariadb //在CentOS 7中,由于 MySQL数据库已

2018年5月3日笔记

常用的正则表达式匹配规则 \d 表示一个数字字符,等价于 [0-9] \D 表示一个非数字字符,等价于 [^\d] \s 表示一个空白字符,等价于 [<空格>\t\r\n\f\v] \S 表示一个非空白字符,等价于 [^\s]\w 表示一个单词字符(数字或字母),等价于 [A-Za-z0-9_]\W 表示一个非单词字符,等价于 [^\w]. 匹配除换行符\n之外的任意一个字符 .* 在一行内,贪婪(尽可能多)匹配任意个字符 .*? 在一行内,非贪婪(尽可能少)匹配任意个字符 (?P<na

2018年5月13日笔记

SQL语句复习 创建一个库 create database DB_name; 授权一个用户 grant all privileges on *.* to 'user1'@'%' identified by 'qwe123'; 创建表 create table table_name(column_name type not null); 查询 select * from tabel_name where condition1 and condition2; 增加 insert into table

2018年5月19日笔记

进程的概念 进程是程序在计算机上的一次执行活动. 进程可分为系统进程和用户进程. 所有正在运行的进程轮流使用CPU,任何一个时间点有且只有一个进程占用CPU. 进程与线程的区别 进程 > 线程 多进程使用CPU的多个核,适合运算密集型 多线程使用CPU的一个核,核心IO密集型 python多进程 -- muiltiprocessing模块 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.Py

2018年3月26日JAVA

一.什么是面向对象? 现实世界中,随处可见的一种事物就是对象,对象是事物存在的实体,如人类.书桌.计算机.高楼大厦等.人类解决问题的方式总是将复杂的事物简单化,于是就会思考这些对象都是由哪些部分组成的.通常都会将对象划分为两个部分,即动态部分与静态部分.静态部分,顾名思义就是不能动的部分,这个部分被称为"属性",任何对象都会具备其自身属性,如一个人,它包括高矮.胖瘦.性别.年龄等属性.然而具有这些属性的人会执行哪些动作也是一个值得探讨的部分,这个人可以哭泣.微笑.说话.行走,这些是这个

2018年4月10日笔记

Python的编码 常见的支持中文的编码有:utf-8 , gbk , gb2312 常见术语:decode(解码) , encode(编码) 在Python2中,不写python代码抬头,在print中文字符时会出现乱码:在Python3中不会出现这种情况. 因为Python2默认将代码文件内容用ASCII编码处理,所以不支持中文:而Python3默认将代码文件内容用utf-8编码处理. 使Python2支持中文有3种方式: 在代码抬头中加上 coding:utf-8 在中文字符串前加 u,如

2018年4月14日笔记

函数关键字 def 函数声明 return 返回值 pass 略过,啥也不干 exit(1) 直接退出 高阶函数:可接收另一个函数作为参数的函数 常用的高阶函数有: map() reduce() filter() sorted() -> 最常用 map()函数:接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回 例1:我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4]上,就可以用m

2018年4月17日笔记

装饰器 作用:在不改变原函数功能的前提下,给现有函数新增功能 装饰器通过@来使用,相当于把原函数作为参数,传给现有函数 例1: 已有函数hello()如下,在hello()函数打印结果前后各加一行字符,作为现有函数的打印结果 def hello(): print("Hello World!") 例2:在例1的基础上,原函数hello()带有参数 例3:在例2原函数带参数的情况下,现有函数startEnd()也带有参数 个人总结: 在原函数和现有函数都带参数的情况下(例3): 先传现有函

2018年4月19日笔记

类的概念与声明 类(class):用来描述具有相同属性和方法的对象的集合. 一个类定义了该集合中每个对象所共有的属性和方法. 对象是类的实例(instance). 声明一个类的一般形式如下: class ClassName(object): def funName(self): pass 一个类时,需注意以下几点: 类名首字母大写,类中函数(即方法)名首字母小写 object是所有类的父类(superclass),默认所有类都继承object object不是必填项,但建议要写上object,可