基本語法差別html
Python2中使用 ASCII 碼做爲默認編碼方式致使string有兩種類型str和unicode,Python3只支持unicode的string。python2和python3字節和字符對應關係爲:python
Python2中相對路徑的import會致使標準庫導入變得困難(想象一下,同一目錄下有file.py,如何同時導入這個文件和標準庫file)。Python3中這一點將被修改,若是還須要導入同一目錄的文件必須使用絕對路徑,不然只能使用相關導入的方式來進行導入。mysql
Python2中存在老式類和新式類的區別,Python3統一採用新式類。新式類聲明要求繼承object,必須用新式類應用多重繼承。web
Python3使用更加嚴格的縮進。Python2的縮進機制中,1個tab和8個space是等價的,因此在縮進中能夠同時容許tab和space在代碼中共存。這種等價機制會致使部分IDE使用存在問題。Python3中1個tab只能找另一個tab替代,所以tab和space共存會致使報錯:TabError: inconsistent use of tabs and spaces in indentation.redis
print語句被python3廢棄,統一使用print函數sql
exec語句被python3廢棄,統一使用exec函數mongodb
execfile語句被Python3廢棄,推薦使用exec(open("./filename").read())數據庫
不相等操做符"<>"被Python3廢棄,統一使用"!="windows
long整數類型被Python3廢棄,統一使用intcentos
xrange函數被Python3廢棄,統一使用range,Python3中range的機制也進行修改並提升了大數據集生成效率
Python3中這些方法再再也不返回list對象:dictionary關聯的keys()、values()、items(),zip(),map(),filter(),可是能夠經過list強行轉換:
mydict={"a":1,"b":2,"c":3} mydict.keys() #<built-in method keys of dict object at 0x000000000040B4C8> list(mydict.keys()) #['a', 'c', 'b']
迭代器iterator的next()函數被Python3廢棄,統一使用next(iterator)
raw_input函數被Python3廢棄,統一使用input函數
字典變量的has_key函數被Python廢棄,統一使用in關鍵詞
file函數被Python3廢棄,統一使用open來處理文件,能夠經過io.IOBase檢查文件類型
apply函數被Python3廢棄
異常StandardError 被Python3廢棄,統一使用Exception
Python2
raise IOError, "file error" #拋出異常 except NameError, err: #捕捉異常
Python3
raise IOError("file error") #拋出異常 except NameError as err: #捕捉異常
Python2,for循環會修改外部相同名稱變量的值
i = 1 print ('comprehension: ', [i for i in range(5)]) print ('after: i =', i ) #i=4
Python3,for循環不會修改外部相同名稱變量的值
i = 1 print ('comprehension: ', [i for i in range(5)]) print ('after: i =', i ) #i=1
Python2,round函數返回float類型值
isinstance(round(15.5),int) #True
Python3,round函數返回int類型值
isinstance(round(15.5),float) #True
Python2中任意兩個對象均可以比較
11 < 'test' #True
Python3中只有同一數據類型的對象能夠比較
11 < 'test' # TypeError: unorderable types: int() < str()
全部在Python3.X中增長的新特性在Python2中都不支持,這些新特性的說明在官網中有詳細的說明:
國內有對這些特性中的重要點進行介紹的博文,能夠做爲參考:http://www.cnblogs.com/animalize/p/5633215.html
咱們在pip官方下載源pypi搜索Python2.7和Python3.5的第三方工具包數能夠發現,Python2.7版本對應的第三方工具類目數量是28523,Python3.5版本的數量是12457,這兩個版本在第三方工具包支持數量差距至關大。
https://pypi.python.org/pypi?:action=browse&c=532
https://pypi.python.org/pypi?:action=browse&c=607
咱們從數據分析的應用角度列舉了常見實用的第三方工具包(以下表),並分析這些工具包在Python2.7和Python3.5的支持狀況:
分類 | 工具名 | 用途 |
---|---|---|
數據收集 | scrapy | 網頁採集,爬蟲 |
數據收集 | scrapy-redis | 分佈式爬蟲 |
數據收集 | selenium | web測試,仿真瀏覽器 |
數據處理 | beautifulsoup | 網頁解釋庫,提供lxml的支持 |
數據處理 | lxml | xml解釋庫 |
數據處理 | xlrd | excel文件讀取 |
數據處理 | xlwt | excel文件寫入 |
數據處理 | xlutils | excel文件簡單格式修改 |
數據處理 | pywin32 | excel文件的讀取寫入及複雜格式定製 |
數據處理 | Python-docx | Word文件的讀取寫入 |
數據分析 | numpy | 基於矩陣的數學計算庫 |
數據分析 | pandas | 基於表格的統計分析庫 |
數據分析 | scipy | 科學計算庫,支持高階抽象和複雜模型 |
數據分析 | statsmodels | 統計建模和計量經濟學工具包 |
數據分析 | scikit-learn | 機器學習工具庫 |
數據分析 | gensim | 天然語言處理工具庫 |
數據分析 | jieba | 中文分詞工具庫 |
數據存儲 | MySQL-python | mysql的讀寫接口庫 |
數據存儲 | mysqlclient | mysql的讀寫接口庫 |
數據存儲 | SQLAlchemy | 數據庫的ORM封裝 |
數據存儲 | pymssql | sql server讀寫接口庫 |
數據存儲 | redis | redis的讀寫接口 |
數據存儲 | PyMongo | mongodb的讀寫接口 |
數據呈現 | matplotlib | 流行的數據可視化庫 |
數據呈現 | seaborn | 美觀的數據但是湖庫,基於matplotlib |
工具輔助 | jupyter | 基於web的python IDE,經常使用於數據分析 |
工具輔助 | chardet | 字符檢查工具 |
工具輔助 | ConfigParser | 配置文件讀寫支持 |
工具輔助 | requests | HTTP庫,用於網絡訪問 |
Python2 沒法安裝mysqlclient。Python3 沒法安裝MySQL-python、 flup、functools3二、Gooey、Pywin3二、 webencodings。
matplotlib在python3環境中安裝報錯:The following required packages can not be built:freetype, png。須要手動下載安裝源碼包安裝解決。
scrapy在python3環境中安裝報錯,需安裝VC++2015安裝包: http://landinghub.visualstudio.com/visual-cpp-build-tools
scipy在Python3環境中安裝報錯,numpy.distutils.system_info.NotFoundError,須要本身手工下載對應的安裝包,依賴numpy,pandas必須嚴格根據python版本、操做系統、64位與否。
運行matplotlib後發現基礎包numpy+mkl安裝失敗,須要本身下載,國內暫無下載源
python2沒法安裝mysql-python和mysqlclient包,報錯:EnvironmentError: mysql_config not found,解決方案是安裝mysql-devel包解決。使用matplotlib報錯:no module named _tkinter,安裝Tkinter、tk-devel、tc-devel解決。
pywin32也沒法在centos環境下安裝。
解決上述的安裝問題後,編寫了測試腳本(附錄)運行上述工具包的簡單案例,測試結果均經過,代表上述第三方工具包安裝成功後在Windows和Centos環境下都可以成功運行