準備
版本選擇
- 第一個話題是版本選擇,是爲了肯定一下咱們從哪裏開始。咱們主要使用 CPython(2.7.x)—— 最多見的發行版
- 若是有機會作 lucene / hadoop / hbase 這些 Java 界工具的相關工做,可使用 Jython(運行於 JVM 中,Java 和 Python 的混搭),性能和易用性都不錯。
- 若是願意深刻研究 Python 實現,或者求高性能 & 好玩,能夠鼓搗一下 PyPy
- Python 3 看起來更合理,爲何沒使用 Python 3? 由於下文提到的一些好玩好用的工具在 Python 3 中尚未被全面支持
編譯
- 如上所述,咱們使用 CPython。常見的 C 源碼安裝方法: ./configure --prefix=<your-path> && make && make install
包管理 & 源
- 包管理使用 pip。
爲何不是 setuptools?由於無卸載
爲何不是 virtualenv? 這個更科學,能夠本身搞,但咱們用 Python 多數是「玩」,沒必要這麼嚴肅
btw: 我本身使用 ArchLinux,使用操做系統自身的包管理工具(pacman & yaourt)比 Python 的貌似更方便,若是你和我同樣,歡迎這樣搞
輔助工具
- ipython 或 bpython 或 Python 本身的 repl,用來快速的「試」代碼,Python 經常使用函數、數據結構什麼的很是符合直覺,不少東西試一下就好了~
注意事項
- 咱們的服務器是 CentOS,默認鏡像中 Python 依賴工具可能不全,這會致使安裝 Python 失敗或者安裝成功後某些標準庫運行不正常,這個時候須要 yum install aaa bbb ccc 後從新編譯安裝一下
- Python 在酒店搜索 & QHotel 方面主要用於輔助 Java 世界的東西和一些小工具。無人幫助 QA 和運維,須要本身保證質量
- 以上 & 如下提到的關鍵詞,如 pip 之類,若是此一次見,請 search google,瀏覽一眼官方文檔,若是有時間請實際操練一下 hello world
主要應用點
數據導來導去
- 常常會有產品經理找到開發要數據,酒店的數據來源通常有:MySQL、PostgreSQL、磁盤上日誌、HDFS上日誌或表
- MySQL 的數據須要用到 Python 鏈接 MySQL 模塊,我我的使用的是 PyMySQL,其餘的還有 MySQLDB 之類的,鏈接 PostgreSQL 我我的使用 Pyscopg2
- HDFS 上的表或文件通常都用 Hadoop Shell 的命令,拉取到本地造成文本文件,和本地磁盤日誌等同處理
- 導數據通常都須要 join、統計、排序什麼的,這個時候要靈活運用 Python 的標準數據結構:dict、list、set 等(這一點對於初學者必須多作幾回纔有體會)
- Python 處理數據在環境完備的狀況下出代碼很快。Python 各類數據訪問模塊不如 JDBC 那樣一致,可是結果集能夠很方便的轉化成 dict,代碼簡潔得多
- 若是涉及到多個 / 多種數據源,各類機器,難以申請各類互訪環境,在這種條件下導數據,須要使用到下文的 Fabric
文本處理
- 字符串處理,Python 中有不少便捷的的字符串處理方法,而且字符串自己也是 list,這方面看書讀文檔吧
- 正則表達式,Python 中沒有正則類型,使用的是字符串,這個和 SQL 同樣,都是語言自己以外的功夫
- json,標準庫裏的 json 對於通常需求(處理接口數據,自動化測試對比 ...)來講就夠了,能夠和 dict 互轉。說這個要比 Java 中簡潔幾十倍並不誇張。標準庫中的 json 在我看來有一點不是很方便:對於非標準的 json(屬性不帶雙引號 or 其餘 js 引擎能正確識別的狀況),這種狀況仍是使用 nodejs 裏面的命令行工具好了
- xml,標準庫裏面的 ElementTree 對於通常需求來講就夠了,咱們這裏在接口方面通常不使用 XML,XML 通常用在(熱發佈)配置文件。和 XML 有關的 bug、故障、delay 因素什麼的已經有好幾起了,所以,對於開發來講,熟練的掌握這個是必要的,能夠用來生成配置文件數據、檢查節點和數據完整性、檢查編碼、查找替換等
- 天然語言處理,用 Python 寫個 trie 只需數十行代碼,用來作個簡單的詞典分詞、轉拼音什麼的很方便。NLP 這方面話題比較大,有專門的書介紹這個,之後有機會共同窗習
運維
- fabric,在Q有個神器叫 atnodes —— 批量 ssh 工具(做者之一是萬珣新萬大師,perl 寫的),Python 世界裏有好幾個和這個對應的東西,我用過最好用並認爲最有前途的是 fabric,能夠批量運行 ssh、上傳下載、腳本化運行方面結合 Python 代碼,清晰明瞭。從其 roadmap 能夠看出有打造 Python 世界中 rake 和 chef 的趨勢。fabric 在哪兒執行最方便?固然是跳板機啦~
- supervisor,相似 systemd、daemontools等,Python 世界中的進程管理工具,用於啓動 nginx,Python 腳本,flask web應用、gunicorn 等。純 Python 實現,有須要進程管理的就交給它吧
算法 & 機器學習
- numpy,用來作數值計算,Python 的簡潔語法在這裏體現很是明顯
- scikit-learn,主流機器學習算法在這裏都有,而且統一接口,易於上手,對着教材寫個 hello world 什麼的至少是很快的,別的不說,官方文檔圖文並茂,帥呆了
- Matplotlib,數據可視化,代碼和圖圖都漂亮的就靠這個了
web
- flask,Servlet 寫煩了有木有,Spring 過重了有木有,Jsp 一坨一坨太磕磣了有木有,Java 搭個環境一閉眼一睜眼一星期過去了有木有。試試 flask,分分鐘出 demo
小工具
- requests,數據抓取用這個很方便,它的 slogan 是 HTTP For Human Beings,言外之一是啥,其餘庫不是給 Human Beings 用的~
- gevent,代碼執行太慢?通常是阻塞了,gevent 基於 libev,提供相似協程的執行體,加上非阻塞 IO 模型,最潮的「併發」執行方式
- pyparse,本身寫個 JSON diff 工具,本身寫個 Hive SQL Code Formatter 什麼的,順便複習(重學、入門)一下編譯原理
- pyXXX,和碼農有關的 tag 前面加個 py 後搜一下,通常都會有個玩意兒,好比 pySVN 什麼的,能幹什麼?發揮本身的想象力好了~
資料推薦
如下是在 Python 方面我收集的一些電子書,我也沒有徹底讀完,但這些還都不錯,有興趣的話歡迎交流node
- Beginning.Python.pdf
- byte.of.python.30.pdf
- Core.Python.Applications.Programming.3rd.pdf
- Data.Structures.and.Algorithms.in.Python.pdf
- Data.Structures.and.Algorithms.Using.Python.pdf
- diveintopython.pdf
- diveintopython3.pdf
- Expert.Python.Programming.pdf
- Fundamentals.of.Python--From.First.Programs.through.Data.Structures.pdf
- Generators.pdf
- Getting.Started.with.Pyparsing.pdf
- Head.First.Python.pdf
- How.to.Think.Like.a.Computer.Scientist--Learning.With.Python.pdf
- Introduction.to.Computer.Science.Using.Python.pdf
- Learning.Python.4th.pdf
- Learning.Python.5th.pdf
- Matplotlib.for.Python.Developers.pdf
- NLP.with.Py.pdf
- NumPy.Beginners.Guide.2nd.pdf
- NumPy.Cookbook.pdf
- pandas.pdf
- Programming.Computer.Vision.with.Python.pdf
- Py.Cookbook.chm
- PyPy.in.Production.pdf
- Python+學習筆記+第二版.pdf
- python-guide.pdf
- Python.Algorithms.pdf
- Python.Cookbook.3rd.pdf
- Python.for.Data.Analysis.pdf
- Python.for.Everyone.pdf
- Python.for.Unix.and.Linux.System.Administration.pdf
- Python.Testing.Cookbook.pdf
- Scipy.and.Numpy.pdf
- The.Python.Standard.Library.by.Example.pdf
- Think.Python.pdf
- Thinking.In.Python.pdf
- Violent.Python.pdf
- 用Python作科學計算.pdf
心得
- 以上提到這些東西是一年多以來我在酒店 Python 方面鼓搗過的東西,多數都是淺嘗輒止,可是頗有樂趣
- 有問題先 search the f^cking web & read the f^cking manual
- 官方文檔、華蟒郵件列表、stackoverflow 多看看。其餘 nodejs、ruby 社區也沒事兒逛逛,這些生態系統中的好東西通常均可以和 Python 一比一翻譯
- 有些問題必定是要本身經歷親身經歷一下才知道之後如何解決的,好比丟失依賴、亂碼、第三方庫的爛坑等。遇到這些問題時,若是時間上有餘地,能夠深挖一下
- 標準庫不給力(不強大,很差用)的狀況下通常會有個第三方包,好比 requests,還有日期處理之類的(Java 和 Python 的日期、時間處理的標準庫都很差用)
- 其餘生態系統中好東西在 Python 世界通常都會有一份包裝,好比 PyLucene(Lucene)、Gevent(Libev),PyLibpcap(Libpcap),PyWebkit(webkit)等