python3与python2不一样的地方
Posted kknote
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3与python2不一样的地方相关的知识,希望对你有一定的参考价值。
进入不同语言版本的Python交互环境
py -2
py -3
pip 命令的执行 :
py -2 -m pip install xxxx
py -3 -m pip install nose
执行python文件
py -2 a.py
py -3 a.py
py2:
print "hello"
py3:
print("hello")
如果不想py -2这样进入python2,可以
进入到python27的安装目录
把python.exe 修改为python2.exe
在环境变量里面加入这个Python27的路径
python3 a.py
pip3 install
python3:str类型---》相当于py2的unicode类型
str类型encode之后变为了bytes类型---》相当于python2的str类型
print(s.encode("gbk"))
b‘\xce\xd2\xc3\xc7‘
print(s.encode("gbk").decode("gbk"))
我们
文件操作
在python3中,默认编码环境为utf8,故不需要像py2那样在文件头指定编码,但是在open()函数多一个encoding参数,在python2是没有的
with open('d:\\gloryroad\\1.txt','r',encoding='utf8') as fp: ... print(fp.read()) ... abbcddeeegiiiilmnnooooorrrstuvyz 中文
在python3中,write函数里面必须是str类型的
with open('d:\\gloryroad\\1.txt','w',encoding='utf8') as fp: ... fp.write("我们\n你们\n".encode('utf8')) ... Traceback (most recent call last): File "<stdin>", line 2, in <module> TypeError: write() argument must be str, not bytes
在python3中连接数据库的包是Pymysql,python2是MySQLdb,连接方法都一样。
序列化
python3没有cpickle,只有pickle
多线程
thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用"thread" 模块。为了兼容性,Python3 将 thread 重命名为 "_thread"。
队列
python3的queue模块是小写,py2是Queue,因此
import queue
q=queue.Queue(5)
q.put(2)
q.get()
2
q
<queue.Queue object at 0x00000000022AAE80>
使用中文格式化时间
from datetime import datetime
nt=datetime.now()
print(nt.strftime(‘%Y年%m月%d日 %H时%M分%S秒‘)) --->报错
法1:
import locale
locale.setlocale(locale.LC_CTYPE, ‘chinese‘)
print(nt.strftime(‘%Y年%m月%d日‘))
2015年08月10日
原理是:“在Windows里,time.strftime使用C运行时的多字节字符串函数strftime,这个函数必须先根据当前locale配置来编码格式化字符串(使用PyUnicode_EncodeLocale)。”如果不设置好locale的话,根据默认的"C" locale,底层的wcstombs函数会使用latin-1编码(单字节编码)来编码格式化字符串,然后导致题主提供的多字节编码的字符串在编码时出错。
法2:
print(nt.strftime(‘%Y{y}%m{m}%d{d}‘).format(y=‘年‘, m=‘月‘, d=‘日‘))
原理是:既然直接丢中文字符进去会出错,那么就绕过这个问题,丢(可能)永远不会出错的ascii字符进去充当占位符,格式化完毕后再将占位符换回中文字符。
法3:
print(time.strftime(‘%Y年%m月%d日‘))
2019年05月23日
以上是关于python3与python2不一样的地方的主要内容,如果未能解决你的问题,请参考以下文章