前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[工具]7个应知的Python库

[工具]7个应知的Python库

作者头像
小莹莹
发布2018-04-25 11:12:14
6560
发布2018-04-25 11:12:14
举报
文章被收录于专栏:PPV课数据科学社区

在我多年的Python编程生涯中,以及在GitHub上探索漫游,我碰到了一些库,用起来特别愉快,这篇文章,就是来扩散这方面的知识。我决定排除很优秀的几个库,像 requests,SQLAlchemy,Flask,fabric等等。因为我认为它们已经相当流行。你可能正在使用这些库在做你的事情。下面列表中的几个库,我认为应当被大家知道,但还没有。

1、pyquery(with lxml) pip install pyquery 在Python中解析HTML,Beautiful Soup经常被推荐,而且它的确也表现很好。提供良好的 Python 风格的 API,而且很容易在网上找到相关的资料文档,但是当你需要在短时间内解析大量文档时便会碰到性能的问题,简单,但是真的非常慢。 究竟如何慢?查看2008年的一篇文章:http://www.ianbicking.org/blog ... .html 我们发现,lxml的性能是如此快。比起Beautiful Soup来,lxml文档就很少,这是我为什么没有采用它用作解析库。而且它在使用上也是相当的笨拙!是的,你可以学习使用Xpath或者cssselect来选择(DOM)树上的特定元素,还算可以。但一旦你选择了一些元素,你真的需要的,你就必须进入lxml导出的属性迷宫中去,有些确实是你想要的,但很多情况下,只返回None。这问题在很多人使用后,慢慢变得容易,但仍然不直观。 这样看,要么选择一个使用简单但是速度奇慢的库呢,要么选择一个速度飞快但是用起来巨复杂的库了,对吧? 错! 进入PyQuery Oh,PyQuery,你是如此优雅,迷人:

代码语言:javascript
复制
from pyquery import PyQuery
page = PyQuery(some_html)

last_red_anchor = page('#container > a.red:last')

太容易了。这就像在Python中深爱的jQuery! 有一些陷阱,PyQuery就像jQuery一样,暴露内部迭代,需要你重新包装:

代码语言:javascript
复制
for paragraph in page('#container > p'):
paragraph = PyQuery(paragraph)
text = paragraph.text()

这是PyQuery作者从jQuery中移植过来的(如果不影响兼容性,它们会修复此问题),可以理解,但仍然有幸看到这样强大的库。 2、dateutil pip install python=dateutil 处理日期是件头疼的事,多亏有dateutil存在。 先来尝试一下dateutil.parser:

代码语言:javascript
复制
from dateutil.parser import parse

>>> parse('Mon, 11 Jul 2011 10:01:56 +0200 (CEST)')
datetime.datetime(2011, 7, 11, 10, 1, 56, tzinfo=tzlocal())fuzzy ignores unknown tokens>>> s = """Today is 25 of September of 2003, exactly
...        at 10:49:41 with timezone -03:00."""
>>> parse(s, fuzzy=True)
datetime.datetime(2003, 9, 25, 10, 49, 41,
              tzinfo=tzoffset(None, -10800))

再看一个:

代码语言:javascript
复制
>>> list(rrule(DAILY, count=3, byweekday=(TU,TH),
...            dtstart=datetime(2007,1,1)))
[datetime.datetime(2007, 1, 2, 0, 0),
datetime.datetime(2007, 1, 4, 0, 0),
datetime.datetime(2007, 1, 9, 0, 0)]

3、fuzzywuzzy pip install fuzzywuzzy fuzzywuzzy 可以让你对两个字符串进行模糊比较,当你需要处理一些人类产生的数据时,这非常有用。下面代码使用Levenshtein 距离比较方法来匹配用户输入数组和可能的选择。

代码语言:javascript
复制
from Levenshtein import distance

countries = ['Canada', 'Antarctica', 'Togo', ...]

def choose_least_distant(element, choices):
'Return the one element of choices that is most similar to element'
return min(choices, key=lambda s: distance(element, s))

user_input = 'canaderp'
choose_least_distant(user_input, countries)
>>> 'Canada'

这已经不错了,但还可以做的更好:

代码语言:javascript
复制
from fuzzywuzzy import process

process.extractOne("canaderp", countries)
>>> ("Canada", 97)

更多介绍看此链接:http://seatgeek.com/blog/dev/f ... ython 4、watchdog pip insatall watchdog watchdog 是一个用来监控文件系统事件的 Python API和shell实用工具。这意味着你可以关注一些目录,定义一个“基于推”的系统。watchdog能支持很多问题。在经过一些工程后,我发现比以前的库都要好。 5、sh pip install sh sh可以让你调用任意程序,就像调用一段函数。

代码语言:javascript
复制
from sh import git, ls, wccheckout master branchgit(checkout="master")print(the contents of this directoryprint(ls("-l"))get the longest line of this filelongest_line = wc(__file__, "-L")

6、pattern (https://github.com/clips/pattern) pip install pattern Pattern 是 Python 的一个 Web 数据挖掘模块。可用于数据挖掘、自然语言处理、机器学习和网络分析。 7、path.py pip install path.py 当我开始学习 Python 时,os.path 是我最不喜欢的 stdlib 的一部分。尽管在一个目录下创建一组文件很简单。

代码语言:javascript
复制
import os

some_dir = '/some_dir'
files = []

for f in os.listdir(some_dir):
files.append(os.path.joinpath(some_dir, f))

但 listdir 在 os 而不是 os.path 中。而有了 path.py ,处理文件路径变得简单:

代码语言:javascript
复制
from path import path

some_dir = path('/some_dir')

files = some_dir.files()

搞定! 再看几个:

代码语言:javascript
复制
>>> path('/').owner
'root'

>>> path('a/b/c').splitall()
[path(''), 'a', 'b', 'c']overriding __div__>>> path('a') / 'b' / 'c'
path('a/b/c')

>>> path('ab/c').relpathto('ab/d/f')
path('../d/f')

最重要的部分?path是从python str继承过来的,所以,你可以很轻松地使用,不用再强制转化为str和担心检查isinstance(s, basestring)(或更糟糕的isinstance(s, str))。 就这些了,我希望能够介绍你以前都没有用过的库。 PPV课翻译小组作品,未经许可严禁转载


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PPV课数据科学社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档