1. 首页
  2. 数据分析

[工具]7个应知的Python库

点击上方免费订阅学习)

在我多年的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。这问题在很多人使用后,慢慢变得容易,但仍然不直观。这样看,要么选择一个使用简单但是速度奇慢的库呢,要么选择一个速度飞快但是用起来巨复杂的库了,对吧?错!进入PyQueryOh,PyQuery,你是如此优雅,迷人:

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

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

forparagraphinpage('#container>p'): paragraph=PyQuery(paragraph) text=paragraph.text()

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

fromdateutil.parserimportparse  >>>parse('Mon,11Jul201110:01:56+0200(CEST)') datetime.datetime(2011,7,11,10,1,56,tzinfo=tzlocal())

fuzzy ignores unknown tokens

>>>s="""Todayis25ofSeptemberof2003,exactly ...at10:49:41withtimezone-03:00.""" >>>parse(s,fuzzy=True) datetime.datetime(2003,9,25,10,49,41, tzinfo=tzoffset(None,-10800))

再看一个:

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

fromLevenshteinimportdistance  countries=['Canada','Antarctica','Togo',...]  defchoose_least_distant(element,choices): 'Returntheoneelementofchoicesthatismostsimilartoelement' returnmin(choices,key=lambdas:distance(element,s))  user_input='canaderp' choose_least_distant(user_input,countries) >>>'Canada'

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

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

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

fromshimportgit,ls,wc

checkout master branch

git(checkout="master")

print(the contents of this directory

print(ls("-l"))

get the longest line of this file

longest_line=wc(__file__,"-L")

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

importos  some_dir='/some_dir' files=[]  forfinos.listdir(some_dir): files.append(os.path.joinpath(some_dir,f))

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

frompathimportpath  some_dir=path('/some_dir')  files=some_dir.files()

搞定!再看几个:

>>>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课翻译小组作品,未经许可严禁转载


数据驱动未来,我们开启智慧!

国内领先的大数据学习社区和职业培训平台,欢迎关注!

PPV课-大数据培训专家

原文始发于微信公众号(PPV课数据科学社区):[工具]7个应知的Python库

原创文章,作者:ppvke,如若转载,请注明出处:http://www.ppvke.com/archives/14821

联系我们

4000-51-9191

在线咨询:点击这里给我发消息

工作时间:周一至周五,9:30-18:30,节假日休息