准备
版本选择
- 第一个话题是版本选择,是为了肯定一下咱们从哪里开始。咱们主要使用 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)等