在电脑上试运行GitHub上用python3.4编的一段代码【GitHub链接-github.com/xiaff/dbc-downloader】,功能是将豆瓣读书上的书与短评存成markdown或者html形式。本机使用的是python2.7,改代码过程顺便总结2与3的一些区别。
具体参照python2to3
- print与print()
- Python 2有两种字符串类型:Unicode字符串和非Unicode字符串。Python 3只有Unicode一种类型
- Python 2有两个全局函数可以把对象强制转换成字符串:unicode()把对象转换成Unicode字符串,还有str()把对象转换为非Unicode字符串。Python 3只有一种字符串类型,所以str()函数即可完成所有的功能。
- long长整型
字典类方法has_key()==>in运算符
Notes Python2 Python3 1 a_dictionary.has_key(‘PapayaWhip’) ‘PapayaWhip’ in a_dictionary 2 x + a_dictionary.has_key(y) x + (y in a_dictionary) in的优先级大于运算符+,运算符or的优先级高于运算符in
返回列表的字典类方法
Notes Python2 Python3 1 a_dictionary.keys() list(a_dictionary.keys()) 2 a_dictionary.items() list(a_dictionary.items()) 3 a_dictionary.iterkeys() iter(a_dictionary.keys()) 4 [i for i in a_dictionary.iterkeys()] [i for i in a_dictionary.keys()] 5 min(a_dictionary.keys()) 没变化 - 使用list()函数将keys()的返回值转换为一个静态列表
- 这是另外一种视图(关于items()方法的)到列表的转换。2to3对values()方法返回值的转换也是一样
- Python 3里不再支持iterkeys()了。如果必要,使用iter()将keys()的返回值转换成为一个迭代器。
- 2to3也能识别出keys()方法的返回值被立即传给另外一个会遍历整个序列的函数,所以也就没有必要先把keys()的返回值转换到一个列表。相反的,min()函数会很乐意遍历视图。这个过程对min(),max(),sum(),list(),tuple(),set(),sorted(),any()和all()同样有效
被重命名或者重新组织的模块
http
Notes Python2 Python3 1 import httplib import http.client 2 import Cookie import http.cookies 3 import cookielib import http.cookiejar 4 import BaseHTTPServer import http.server import SimpleHTTPServer import CGIHttpServer - http.client模块实现了一个底层的库,可以用来请求http资源,解析http响应。
- http.cookies模块提供一个蟒样的(Pythonic)接口来获取通过http头部(http header)Set-Cookie发送的cookies。
- 常用的流行的浏览器会把cookies以文件形式存放在磁盘上,http.cookiejar模块可以操作这些文件。
- http.server模块实现了一个基本的http服务器
urllib
Python 2有一些用来分析,编码和获取URL的模块,但是这些模块就相互重叠。在Python 3里,这些模块被重构、组合成了一个单独的包
Notes Python2 Python3 1 import urllib import urllib.request, urllib.parse, urllib.error 2 import urllib2 import urllib.request, urllib.error 3 import urlparse import urllib.parse 4 import robotparser import urllib.robotparser 5 from urllib import FancyURLopener from urllib.request import FancyURLopener from urllib import urlencode from urllib.parse import urlencode 6 from urllib2 import Request from urllib.request import Request from urllib2 import HTTPError from urllib.error import HTTPError 全局函数raw_input()和input()
Notes Python2 Python3 1 raw_input() input() 2 raw_input(‘prompt’) input(‘prompt’) 3 input() eval(input())
几点:
input问题:在python2中使用,若使用input函数输入时需要加双引号,否则不是str类型。input和raw_input的区别
utf8 编码问题: open(file,‘w’,encoding=‘utf-8’)在python2中的不可用性 解决办法是去掉encoding=‘utf-8’,在代码开头加入
import sysreload(sys)sys.setdefaultencoding('utf8')urllib2的调用使用urllib2发请求时注意R要大写,是urllib2.Request