Python

总结一下我在工作中遇到的python2与python3的区别,坑

2018-07-06  本文已影响15人  sexy_cyber

1.除法:/

python3

44/100
0.44

python2

44/100
0

我要计算上10万条数据,结果全都是假数据

2.将目标数据格式化成字符串:str()

python3

str(变量)
"变量"

不管你是结构化数据比如:元祖,列表,字典,等等等,还是python基本数据类型,都没毛病
python2

str(变量)
“很多可能”

如果变量是基本数据类型,那没什么毛病,但是如果是结构化数据,那问题打了,结构内的元素全部变成了unicode编码,import sys,#coding:utf-8都是解决不了的,然后,接下来,就很难接下来了

3.中文识别与运算:

python3:

中文直接写就行了,没有任何毛病

python2

import sys
sys.reload(sys)
sys.setdefaultencoding('utf-8')
"#coding:utf-8
u"汉字"

这些都要添加上去,烦的一逼

4.url编码:

python3

from urllib.parse import quote
quote('测试')

python2

from urllib import quote
quote('测试')

5.编码,解码:encode(),decode()

python2

>>> a = '你好'
>>> a.decode('utf-8')
u'\u4f60\u597d'
>>>a.encode('utf-8')
'Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)'
>>> a = '积极'
>>> a
'\xe7\xa7\xaf\xe6\x9e\x81'
>>> print(type(a))
<type 'str'>
>>> 

python3

>>> a
'积极'
>>> a.encode('utf-8')
b'\xe7\xa7\xaf\xe6\x9e\x81'
>>> a
'积极'
>>> a.decode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'decode'
>>> 

说明:
python2是不能够对汉字进行编码的(encode()),但是python是可以的
python2可以对汉字进行解码(decode()),但是python3不行
根源在于:python2汉字存在的方式是字符串类型的utf-8二进制码的字符串类型,类似于这样:'\xe7\xa7\xaf\xe6\x9e\x81' ,我的是mac系统;
然而,python3里面是汉字就是汉字,就像这样:‘测试’

6.正则匹配问题:re

从mongodb里面提取数据,需要对数据进行过滤,转化格式,用到re匹配,python3没有任何毛病,但是:
一万个曹尼玛,试过千万种方法,搞了我几个小时,最后,想想mongodb里面保存的默认编码是unicode,那我在正则规则字符串前面加一个u试试看。
卧槽
卧槽
居然成功,
心累啊,

 print(date) 
 date = re.match(u'(\d+)月(\d+)日',date)
 date = date.group(1)+'-' +date.group(2)

上一篇 下一篇

猜你喜欢

热点阅读