python 2.*和3.*的变化

 

1、urllib2是python自带的模块,在python3.x中被改为urllib.request,如

 
  1. <span style="font-size:12px;">url = "http://music.baidu.com/album/all?order=time&style=pop"  
  2. html = urllib.request.urlopen(url).read()  
  3. </span>  

2、raw_input 和 input

在 Python 版本 2.x 中,raw_input() 会从标准输入(sys.stdin)读取一个输入并返回一个字符串,且尾部的换行符从末尾移除


 
  1. <span style="font-size:12px;">>>>quest = raw_input("What is your quest? ")  
  2. What is your quest? To seek the holy grail.  
  3. </span>  


与之不同,Python 2.x 中的 input() 函数需要的是一个有效的 Python 表达式,比如 3+5

最初,曾有人建议将 input() 和 raw_input() 从 Python 内置的名称空间一并删除,因此就需要进行导入来获得输入能力。这从方法上就不对;因为,简单键入:
>>>quest = input("What is your quest?")

将会变为:


 
  1. <span style="font-size:12px;">>>>import sys  
  2. >>>print("What is your quest?")  
  3. >>>quest = sys.stdin.readline()  
  4. </span>  

对于一个简单输入而言,这太过繁琐,并且对于一个新手,这未免太难理解。往往需要向他们讲述模块 和导入 究竟是怎么回事、字符串输出以及句点操作符又是如何工作的(如此麻烦的话,与 Java™ 语言就没什么差别了)。所以,在 Python 3 内,将 raw_input() 重命名为 input(),这样一来,无须导入也能从标准输入获得数据了。如果您需要保留版本 2.x 的 input() 功能,可以使用 eval(input()),效果基本相同。

3、can't use a string pattern on a bytes-like object

  3.0现在的参数更改了,现在读取的是bytes-like的,但参数要求是chart-like的,故定义pattern的时候在前面加一个小b,表示要操作的对象是bytes类型就可以了,,如


 
    1. url = "http://music.baidu.com/album/all?order=time&style=pop"  
    2. html = urllib.request.urlopen(url).read()  
    3. uri = re.findall(b'/song/d+',html,re.M)  

s.encode(encoding) -> bytes
b.decode(encoding) -> str
bytes 就是一堆字节,str 是字符串;你把字符串按某种编码编码之后就成了一堆字节,正确地解码后就成了字符串。

eg1:

# apps.append(apk.split(":")[-1].split("=")[0])报错:TypeError: 'str' does not support the buffer interface

按照下面做一个转换,就fix了

s=apk.decode("GBK").split(":")[-1].split("=")[0]
apps.append(s)


eg2:

 out = shell("dumpsys window w | %s \/ | %s name=" %(find_util, find_util)).stdout.read()

return pattern.findall(out)[0]

报错:can't use a string pattern on a bytes-like object

按照下面做一个转换,就fix了

 out = shell("dumpsys window w | %s \/ | %s name=" %(find_util, find_util)).stdout.read().decode("GBK")

 

 

posted @ 2015-05-25 15:45  melody_emma  阅读(320)  评论(0编辑  收藏  举报