1.str的区别
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
由此引申出加解密时的str的处理:
# 基于python3
import base64
str01 = "blue加勒比"
str_base = base64.b64encode((":"+str01).encode("utf-8")) # base64加密需要bytes类型,所以将string编码encode为bytes类型, 返回的也是bytes类型
print(str_base) # type:bytes
print(type(str_base))
temp = str_base.decode("utf-8") # 如果转化为string,需要将bytes类型解码,decode,等同于 str(str_base, encoding="utf-8")
print(temp)
print(type(temp)) # type: str
------
结果:
b'OmJsdWXliqDli5Lmr5Q='
<class 'bytes'>
OmJsdWXliqDli5Lmr5Q=
<class 'str'>
********************************************
基于python2
import hashlib
import base64
username = "username"
password = hashlib.sha256(username).hexdigest() # py2的str可以认为和unicode同类型,不用转bytes类型,所以此处直接sha256加密后通过hexdigest()方法解码
hash_str = hashlib.sha256(username + str(int(time_now)) + password).hexdigest() # 同上
passwordHash = base64.b64encode(hash_str)[:12] # 由于py2中str 等同于unicode,base64加密时,也是不用将str转为byte类型
2.python3 中的reload(sys)
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8’)
以上是python2的写法,但是在python3中这个需要已经不存在了,这么做也不会什么实际意义。
在Python2.x中由于str和byte之间没有明显区别,经常要依赖于defaultencoding来做转换。
在python3中有了明确的str和byte类型区别,从一种类型转换成另一种类型要显式指定encoding。
但是仍然可以使用这个方法代替
import importlib,sys
importlib.reload(sys)
3.urllib库在python2与python3中的区别
Urllib是python提供的一个用于操作url的模块。
在python2中,有urllib库和urllib2库。在python3中,urllib2合并到urllib库中,我们爬取网页的时候,经常用到这个库。
升级合并后,模块中包的位置变化的地方较多。
以下是python2与python3中常用的关于urllib库的变化:
1.在python2中使用import urllib2————对应的,在python3中会使用import urllib.request,urllib.error
2.在python2中使用import urllib————对应的,在python3中会使用import urllib.request,urllib.error,urllib.parse
3.在python2中使用import urlparse————对应的,在python3中会使用import urllib.parse
4.在python2中使用urllib2.urlopen————对应的,在python3中会使用urllib.request.urlopen
5.在python2中使用urllib.urlencode————对应的,在python3中会使用urllib.parse.urlencode
6.在python2中使用urllib.quote————对应的,在python3中会使用urllib.request.quote
7.在python2中使用cookielib.CookieJar————对应的,在python3中会使用http.CookieJar
8.在python2中使用urllib2.Request————对应的,在python3中会使用urllib.request.Request
以上就是urllib相关模块从python2到python3的常见一些变化。