在我多年的 Python 编程经历以及在 Github 上的探索漫游过程中,我发掘到一些很不错的 Python 开发包,这些包大大简化了开发过程,而本文就是为了向大家推荐这些开发包。
请注意我特别排除了像 SQLAlchemy 和 Flask 这样的库,因为其实在太优秀了,无需多提。
下面开始:
1. PyQuery (with lxml)
安装方法 pip install pyquery
Python 解析 HTML 时最经常被推荐的是 Beautiful Soup ,而且它的确也表现很好。提供良好的 Python 风格的 API,而且很容易在网上找到相关的资料文档,但是当你需要在短时间内解析大量文档时便会碰到性能的问题,简单,但是真的非常慢。
下图是 08 年的一份性能比较图:

这个图里我们发现 lxml 的性能是如此之好,不过文档就很少,而且使用上相当的笨拙!那么是选择一个使用简单但是速度奇慢的库呢,还是选择一个速度飞快但是用起来巨复杂的库呢?
谁说二者一定要选其一呢,我们要的是用起来方便,速度也一样飞快的 XML/HTML 解析库!
而 PyQuery 就可以同时满足你的易用性和解析速度方面的苛刻要求。
看看下面这几行代码:
1 |
from pyquery import PyQuery |
2 |
page = PyQuery(some_html) |
4 |
last_red_anchor = page('#container > a.red:last') |
很简单吧,很像是 jQuery,但它却是 Python。
不过也有一些不足,在使用迭代时需要对文本进行重新封装:
1 |
for paragraph in page('#container > p'): |
2 |
paragraph = PyQuery(paragraph) |
3 |
text = paragraph.text() |
2. dateutil
安装方法:pip install dateutil
处理日期很痛苦,多亏有了 dateutil
01 |
from dateutil.parser import parse |
03 |
>>> parse('Mon, 11 Jul 2011 10:01:56 +0200 (CEST)') |
04 |
datetime.datetime(2011, 7, 11, 10, 1, 56, tzinfo=tzlocal()) |
06 |
# fuzzy ignores unknown tokens |
08 |
>>> s = """Today is 25 of September of 2003, exactly |
09 |
... at 10:49:41 with timezone -03:00.""" |
10 |
>>> parse(s, fuzzy=True) |
11 |
datetime.datetime(2003, 9, 25, 10, 49, 41, |
12 |
tzinfo=tzoffset(None, -10800)) |
3. fuzzywuzzy
安装方法:pip install fuzzywuzzy
fuzzywuzzy 可以让你对两个字符串进行模糊比较,当你需要处理一些人类产生的数据时,这非常有用。下面代码使用Levenshtein 距离比较方法来匹配用户输入数组和可能的选择。
01 |
from Levenshtein import distance |
03 |
countries = ['Canada', 'Antarctica', 'Togo', ...] |
05 |
def choose_least_distant(element, choices): |
06 |
'Return the one element of choices that is most similar to element' |
07 |
return min(choices, key=lambda s: distance(element, s)) |
09 |
user_input = 'canaderp' |
10 |
choose_least_distant(user_input, countries) |
这已经不错了,但还可以做的更好:
1 |
from fuzzywuzzy import process |
3 |
process.extractOne("canaderp", countries) |
4. watchdog
安装方法:pip install watchdog
watchdog 是一个用来监控文件系统事件的 Python API和shell实用工具。
5. sh
安装方法:pip install sh
sh 可让你调用任意程序,就好象是一个函数一般:
01 |
from sh import git, ls, wc |
03 |
# checkout master branch |
04 |
git(checkout="master") |
06 |
# print(the contents of this directory |
09 |
# get the longest line of this file |
10 |
longest_line = wc(__file__, "-L") |
6. pattern
安装方法:pip install pattern
Pattern 是 Python 的一个 Web 数据挖掘模块。可用于数据挖掘、自然语言处理、机器学习和网络分析。
7. path.py
安装方法:pip install path.py
当我开始学习 Python 时,os.path 是我最不喜欢的 stdlib 的一部分。尽管在一个目录下创建一组文件很简单。
6 |
for f in os.listdir(some_dir): |
7 |
files.append(os.path.joinpath(some_dir, f)) |
但 listdir 在 os 而不是 os.path 中。
而有了 path.py ,处理文件路径变得简单:
3 |
some_dir = path('/some_dir') |
5 |
files = some_dir.files() |
其他的用法:
04 |
>>> path('a/b/c').splitall() |
05 |
[path(''), 'a', 'b', 'c'] |
08 |
>>> path('a') / 'b' / 'c' |
11 |
>>> path('ab/c').relpathto('ab/d/f') |
是不是要好很多?
- 063 Python必备库-从人机交互到艺术设计
目录 一.概述 二.Python库之图形用户界面 2.1 PyQt5 2.2 wxPython 2.3 PyGObject 三.Python库之游戏开发 3.1 PyGame 3.2 Panda3D ...
- Python开发:部分第三方库无法在线安装解决方法
前言:Python开发:Python2和Python3的共存和切换使用 一.问题如下: 1.截图: 2.错误信息: Could not find a version that satisfies th ...
- Python 开发安卓Android及IOS应用库Kivy安装尝试
Python 开发安卓Android及IOS应用库Kivy安装尝试: 先来看看这货可以用来制作什么应用: Create a package for Windows Create a package f ...
- 天下武功,无快不破,Python开发必备的6个库
01 Python 必备之 PyPy PyPy 主要用于何处? 如果你需要更快的 Python 应用程序,最简单的实现的方法就是通过 PyPy ,Python 运行时与实时(JIT)编译器.与使用普通 ...
- python 开发技巧(1)-- 用PyCharm安装第三方库
在python开发中,我们经常需要安装一些python的第三方类库,包等等,用PyCharm就会安装就会超级方便 1.打开上面的小扳手 2.点击页面左边的Project Interpreter 3.点 ...
- Python开发WebService--使用soaplib库
Python开发WebService--使用soaplib库 使用soaplib开发基于Python语言的WebService主要有以下四个步骤:一.准备环境 S1:下载插件Python.s ...
- 安装Python算法库
安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...
- 常用python机器学习库总结
开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处 ...
- [Python] 机器学习库资料汇总
声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: ...
随机推荐
- 在Tomat7上使用Redis保存Session
源博客http://my.oschina.net/gccr/blog/321083 当用户量大.应用服务器使用集群来布署时,使用Tomcat默认自带的Session就不能满足需求了.当然解决方法有很多 ...
- C++ string到底是什么
C++ string到底是什么? 要回答这个问题,先要了解什么是basic_string.看一下basic_string的声明: template < class charT, //定义字符串中 ...
- 反编译CHM文件
1.进入dos 2.输入 HH.EXE -decompile <输出路径> <目标chm文件> 例如:hh.exe -decompile d:\heihei D:\123.ch ...
- CSS文本与连接
CSS文本 CSS文本属性可以定义文本外观,通过文本属性,可以改变文本的颜色.字符间距.对齐文本.装饰文本.对文本缩进等等. 常用的文本属性 属性 描述 color 文本颜色 direction 文本 ...
- Unicode 与(UTF-8,UTF-16,UTF-32,UCS-2)
Unicode是什么? Unicode源于一个很简单的想法:将全世界所有的字符包含在一个集合里,计算机只要支持这一个字符集,就能显示所有的字符,再也不会有乱码了. U+597D = 好 597D 是1 ...
- [原创] WINDOWS 7 精简教程之驱动精简 可用于64和32
追风神话 发表于 2014-9-1 11:35:56 https://www.itsk.com/forum.php?mod=viewthread&tid=334491&highli ...
- Java远程调试代码不一致问题汇总
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- Python之路 day1 用户登录多次被锁定
编写登陆接口: 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 #Author:ersa import getpass,os,sys #读取账户信息到内存中 try: accounts_fil ...
- thinkphp分页搜索条件带中文参数
/** * 中文处理 * @param type $str * @return str * $author lxh */ function url2word($str){ $sub=strpos($s ...
- cxf的soap风格+spirng4+maven 服务端
简介 SOAP 比较复杂,基于XML,有对应规范:REST利用HTTP请请求方式GET,POST,PUT,delete约定具体操作.简单的说,SOAP通过传输XML,XML定义了请求和响应的具体数据, ...