Python标准库
译于 A byte of Python
引言:
Python 标准库(Standard Library)包含了大量非常有用的模块(module),并是Python的标准安装版的一部分。熟悉Python标准库是非常重要的,因为当你熟悉这些标准库的行为之后,你会发现很多东西能够快速的解决。
我们将介绍标准库中一些常用的模块。你可以在Python文档的"Library Reference"(随Python而安装)部分找到详尽的关于所有模块的介绍和展示。
下面我们开始展示一些非常有用的模块。
sys module
The sys module包含了与系统相关的功能。假设我们想要检查当前使用的Python的版本,并检查我们正在使用的的版本不低于Python3,sys module帮助我们完成了相关的功能。
>>> import sys
>>> sys.version_info
(3, 0, 0, 'beta', 2)
>>> sys.version_info[0] >= 3
执行过程:
sys module 有一个version_info数组(tuple)保存了版本信息。第一个元素是主版本号(major version)。我们能够通过检查这个确保程序只在某个版本以上(或以下运行),如下:
# Filename: versioncheck.py
import sys, warnings
if sys.version_info[0] < 3:
warnings.warn("Need Python 3.0 for this program to run", RuntimeWarning)
else:
print('Proceed as normal')
输出如下:
$ python2.5 versioncheck.py
versioncheck.py:6: RuntimeWarning: Need Python 3.0 for this program to run
RuntimeWarning)
$ python3 versioncheck.py
Proceed as normal
执行过程:
我们使用了标准库中的另外一个模块:warnings,它为最终用户显示警告信息。如果Python的版本号小于3,我们将显示出相应的警告信息。
#########################################
logging module
如果你想让一些调试信息或者一些重要的其他信息存储起来以便于之后来检查程序是否按照你想要的方式运行,你会怎么做?你怎样来把这些信息存储在某个地方(store somewhere)?logging module能帮助你实现这些。
# Filename: use_logging.py
import os, platform, logging
if platform.platform().startswith('Windows'):
logging_file = os.path.join(os.getenv('HOMEDRIVE'),
os.getenv('HOMEPATH'), 'test.log')
else:
logging_file = os.path.join(os.getenv('HOME'),'test.log')
logging.basicConfig(
level = logging.DEBUG,
format='%(asctime)s : %(levelname)s : %(message)s',
filename = logging_file,
filemode = 'w',
)
logging.debug("Start of the program")
logging.info("Doing something")
logging.warning("Dying now")
程序输出:
$python use_logging.py
如果你查看文件test.log的内容(在C:\Users\Administrator目录下),你将看到以下内容:
2010-06-13 23:25:39,128 : DEBUG : Start of the program
2010-06-13 23:25:39,315 : INFO : Doing something
2010-06-13 23:25:39,315 : WARNING : Dying now
执行过程:
我们使用了标准库中的三个模块:os module用来与操作系统交互, platform module用来获得使用的平台的信息,例如操作系统,logging module用来输出日志信息。
首先,我们通过platfrom.platform()返回的字符串来判断我们使用的操作系统 (可以通过import platfomr; help(platform)获得更多关于platform的信息)。如果是Windows系统, 我们找出系统盘(home drive), 用户主目录(home folder)并提供用来存储信息的文件名。把这三部分连接起来,我们就得到了文件的绝对路径。对于其他平台(Unix/Linux), 我们仅需要知道用户主目录(home folder)就可以获得文件的绝对路径了。
我们使用os.path.join()函数把上述三部分连接起来。使用具体的函数(join)而不是通过执行字符串的"+"操作是因为该函数能保证文件路径的格式与操作系统中路径格式匹配。我们配置(configure) logging module用来把信息以特定的格式保存到指定的文件中。
最后,我们把debugging, informagion, warning甚至cirtical信息保存到文件中。一旦程序执行完成,我们就可以查看文件,并掌握程序执行的过程,即使程序中没有为用户输出任何信息。
########################################
urllib and json modules
如果我们能让程序从网络上获得搜索结果应该是多么令人愉快的一件事啊!下面我们开始尝试。
我们只需要通过几个模块就能实现上面的效果。首先需要的就是url module,它为我们抓取(fetch)网络上的任何网页。我们将使用雅虎(Yahoo!)来获得搜索结果,幸运的是它为我们提供了JSON格式的搜索结果,我们可以使用python标准库上内置的json module来简化解析json格式的结果的过程。
TODO
我在使用过程中遇到了一些问题,最终没能成功——希望在以后能顺利实现该功能。
# Filename: yahoo_search.py
import sys
if sys.version_info[0] != 3:
sys.exit('This program need Python 3')
import json
import urllib, urllib.parse, urllib.request, urllib.response
# Get your own APP ID at http://developer.yahoo.com/wsregapp/
YAHOO_APP_ID = \
'jl22psvV34HELWhdfUJbfDQzlJ2B57KFS_qs4I8D0Wz5U5_yCI1Awv8.lBSfPhwr'
SEARCH_BASE = \
'http://search.yahooapis.com/WebSearchService/V1/webSearch'
class YahooSearchError(Exception):
pass
# Taken from http://developer.yahoo.com/python/python-json.html
def search(query, results=20, start=1, **kwargs):
kwargs.update({
'appid': YAHOO_APP_ID,
'query': query,
'results': results,
'start': start,
'output': 'json'
})
url =SEARCH_BASE + '?' + urllib.parse.urlencode(kwargs)
result = json.load(urllib.request.urlopen(url))
if 'Error' in result:
raise YahooSearchError(result['Error'])
return result['ResultSet']
query = input('What do you want to search for?')
for result in search(query)['Result']:
print("{0} : {1}".format (result['Title'], result['Url']))
执行过程:
通过为我们的搜索文本指定一种具体格式,我们能从一个具体的站点(particular website)上获得搜索结果。我们通过使用key1=value1&key2&value2的格式指定一些选项,这个功能是通过urllib.parse.urlencode()函数实现的。
在你的浏览器中打开如下链接:http:/ / search. yahooapis. com/
WebSearchService/ V1/ webSearch?query=byte+ of+ python&
appid=jl22psvV34HELWhdfUJbfDQzlJ2B57KFS_qs4I8D0Wz5U5_yCI1Awv8. lBSfPhwr&
results=20& start=1& output=json
你将会看到20条搜索结果,其格式为JSON的形式。
我们使用urllib.request.urlopen()函数来获得到一个URL的连接,并把打开的URL传递给json.load()进行加载。该函数将读取加载的内容,并转化为Python对象。然后我们通过循环的方式把这些结果显示给最终用户(end-user)
Module of Week Series
标准库中还有更多的模块:debugging, handling, command line options, regular expressions 等等。可以通过阅读Doug Hellmann的Python Module of Week Series来更深入的学习和使用这些模块。
结束语:
通过上面的介绍,我们学习了几种Python modules,而在Python中还有大量的模块。我们强烈推荐通过浏览Python标准库文档(Python Standard Library documentation, http:/ / docs. python. org/ dev/ 3. 0/ library/)来学习所有相关的模块。
说明:该文章从 A byte of Python v1.92 for Python3.0翻译而来,望指正
分享到:
2010-06-13 23:06
浏览 4300
评论