初次学习Python,只是简单的学习了点语言,工作中突然就遇到要从Python2迁移Python3的问题,一顿搜索,总结下遇到的问题
1、print函数
python2中print可不加(),python3必须添加,因此需要提替换
print (.*?);?$
含义:匹配print语句的所有部分,并将print的内容获取到第一个括号里
正则表达式 含义
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
- 匹配0个或多个的表达式
? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
() 匹配括号内的表达式,也表示一个组
; 匹配分号(虽然Python中可以在表达式结尾不加分号,但是难免有人会加)
$ 匹配输入字符串的末尾
print($1)
含义:替换,并且替换后的括号中的内容就是之前获取到的第一个括号里的内容
2、关于urlparse
python3整合了urlparse到urllib,改动如下:
from urllib.parse import urlparse
urllib.request.unquote(url)
urllib.request.unquote('http://www.qianmu.org/%E6%B9%96%E9%A6%96%E5%A4%A7%E5%AD%A6')
得出的结果为:'http://www.qianmu.org/湖首大学'
3、关于python3 setdefaultencoding报错:
module ‘sys’ has no attribute ‘setdefaultencoding’
Python 3 系统默认使用的就是utf-8编码,所以对于使用的是Python3的情况,就不需要sys.setdefaultencoding(“utf-8”)这段代码,而Python 3 的 sys 库里面也已经没有 setdefaultencoding() 函数了。
4、reload()函数
在Python2中,reload()是内置函数
Python3中,reload()被转移到imp模块以及importlib中
Python3.4之后imp模块逐步被废弃,read()移至importlib模块中
from importlib import reload
5、多线程函数
python3中,由于thread有两个很致命的问题,所以python3更推荐用threading代替thread,所以,thread被改名为_thread
6、has_key方法
在python2中是可以使用的,在python3中删除了。
比如:
if dict.has_key(word):
改为:
if word in dict:
7、cmp函数
python 3.4.3 的版本中已经没有cmp函数,被operator模块代替
import operator
operator.eq(a, b)
lt(a,b) 相当于 a<b 从第一个数字或字母(ASCII)比大小
le(a,b)相当于a<=b
eq(a,b)相当于a==b 字母完全一样,返回True,
ne(a,b)相当于a!=b
gt(a,b)相当于a>b
ge(a,b)相当于 a>=b
8、items()替换iteritems()
Python 3.x 用items()替换iteritems()