简介

python标准库作为python标准安装的一部分,其自身包含数量庞大的实用模块,

因此熟悉python标准库非常重要,因为很多问题都能利用python标准库快速解决。

下面我们将研究标准库中的一些常用模块。完整的标准库模块列表可以在安装python时附带的文档中的’Library Reference’一节找到。

现在就让我们来看看这些模块吧。

提示

如果你感觉本章内容对于你过于超前,那么可以跳过本章。但是当你熟悉python编程后我强烈建议你把这章补上。

sys模块

sys模块包含一些系统相关的功能。先前我们已经见识过sys.argv列表,它包括命令行参数。

假设我们想要检查所使用的python命令行的版本,比方说我们需要确定正在使用的版本不低于3

诸如此类的功能正是sys模块所提供的。

>>> import sys

>>> sys.version_info

(3, 0, 0, 'beta', 2)

>>> sys.version_info[0] >= 3

True

代码如何工作:

sys模块含有一个version_info元组用于提供版本信息。其第一个元素为主版本。

因此我们可以通过检查它确保程序只会运行在python 3.0和3.0以上:

#!/usr/bin/python

# 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,则显示相应的警告。

loggin模块

如果你希望得到存储在某处的重要信息或调试信息,以便检查程序是否如期运行时该咋办呢?你如何将这些信息存储在某处呢?

这些可以通过logging模块做到。

#!/usr/bin/python

# 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

Logging to C:/Users/swaroop/test.log

If we check the contents of test.log, it will look something like this:

2008-09-03 13:18:16,233 : DEBUG : Start of the program

2008-09-03 13:18:16,233 : INFO : Doing something

2008-09-03 13:18:16,233 : WARNING : Dying now

代码如何工作:

我们使用了3个标准库模块 – os模块与系统交互,platform模块取得平台信息,即操作系统信息。而logging模块用于记录日志信息。

首先,我们通过platform.platform(详见import platform; help(platform))返回的字符串检测操作系统类型。

如果为windows系统,则分别计算出主驱动器,主目录与文件名,这个文件用于存储相关信息。然后将这三部分合并得到文件的全路径。

对于其他平台,我们只需得到用户的主目录就能计算出文件的全路径了。

我们之所以没有简单的使用字符串连接合并这三部分而是利用os.path.join,原因在于这个特殊的函数可以确保路径格式符合特定系统的规范。

之后我们配置logging模块,指示在我们指定的文件中以特殊的格式写入所有信息。

最后,我们就能写入信息了,它们可以是调试信息,警告信息甚至是危机信息(critical messages)。

一但程序开始运行,我们就可以检查这个文件以了解程序发生了什么,而用户并不会看到这些信息。

urllibjson模块

如果我们让自己编写的程序在web上获得搜索结果是不是很有趣呢?我们现在就来研究下。

这个功能可以通过少量模块实现。第一urllib模块使得我们可以访问internet上的任何网页。

这里我们准备利用雅虎搜索获得搜索结果,它恰好以一种被称作JSON的格式为我们提供搜索结果。

这种格式分析起很方便,因为我们使用的是标准库中的内建json模块。

#!/usr/bin/python

# Filename: yahoo_search.py

import sys

if sys.version_info[0] != 3:

sys.exit('This program needs Python 3.0')

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']))

代码如何工作:

(注:这个例子目前有错误,暂且跳过)

Module of the Week系列

标准库中还有更多内容有待探索,例如debug(http://docs.python.org/dev/library/pdb.html),

处理命令行选项(http://docs.python.org/py3k/library/getopt.html),

正则表达式(http://www.diveintopython.org/regular_expressions/index.html)等等。

而进一步研究标准库的最好办法就是阅读Python Module of the Week系列了(http://www.doughellmann.com/projects/PyMOTW/)。

小结

我们已经探索了许多标准库模块中的功能。强烈推荐浏览python标准库文档以便对所有模块有个概念性的认识(http://docs.python.org/py3k/library/)

接下来,我们将概览python的方方面面让我们的python之旅更加完整

简明Python3教程 16.标准库的更多相关文章

  1. 简明Python3教程(A Byte of Python 3)

    关键字:[A Byte of Python v1.92(for Python 3.0)] [A Byte of Python3] 简明Python教程 Python教程 简明Python3教程  简明 ...

  2. 简明Python3教程 1.介绍

    Python是少有的几种既强大又简单的编程语言.你将惊喜地发现通过使用Python即可轻松专注于解决问题而非和你所用的语言格式与结构. 下面是Python的官方介绍: Python is an eas ...

  3. 记阮一峰---JavaScript 标准参考教程之标准库-Object对象

    在看到阮大神的-标准库-Object对象时 有个 类型判断类型 方法可能以后会用到.特此记录一下 4.3:toString()的应用:判断数据类型 Object.prototype.toString方 ...

  4. 简明Python3教程 15.异常

    简介 当程序发生意外情况时则产生异常. 例如你需要读一个文件而这个文件并不存在会咋样?又或者是程序运行时你把它误删除了呢? 上述情形通过异常进行处理. 类似的,如果你的程序存在一些非法语句会发生什么呢 ...

  5. 简明Python3教程 12.问题解决

    我们已经探究了python语言的方方面面,现在我们将通过设计编写一个有用的程序将这些内容有机的结合起来. 主要目标是让大家有能力独自编写程序. 问题 我们要解决的问题是”希望编写一个程序,用于创建所有 ...

  6. 简明Python3教程 10.模块

    简介 现在你已经知道通过定义函数可以在你的程序中复用代码.但当你想在你编写的其他程序中复用大量函数怎么办呢? 也许你可以猜到了,办法就是利用模块. 有各种编写模块的方式,但最简单的方式是创建一个以.p ...

  7. 简明Python3教程 3.介绍

    介绍 Python是少有的几种既强大又简单的编程语言.你将惊喜地发现通过使用Python即可轻松专注于解决问题而非和你所用的语言格式与结构. 下面是Python的官方介绍: Python is an ...

  8. 简明Python3教程 18.下一步是什么

    如果你有认真通读本书之前的内容并且实践其中包含的大量例程,那么你现在一定可以熟练使用python了. 同时你可能也编写了一些程序用于验证python特性并提高你的python技能.如果还没有这样做的话 ...

  9. 简明Python3教程 6.基础

    你肯定不满足于只打印"Hello World"吧? 你想要的更多 - 你希望得到一些输入,操纵它后再从中得到某些东西.我们可以使用python中的常量和变量实现这些功能. 字面常量 ...

随机推荐

  1. 如何使用google地图的api(整理)

    如何使用google地图的api(整理) 一.总结 一句话总结:直接用script标签引google地图api即可. 1.如何使用google地图的api? 页面引用javascript文件<s ...

  2. css3-12 transform:scale(1.2,1.2)实现移入元素变大特效

    css3-12 transform:scale(1.2,1.2)实现移入元素变大特效 一.总结 一句话总结:transform:scale(1.2,1.2)鼠标移入的时候变大一点点,超出边框的部分隐藏 ...

  3. Spring Boot初步认识

    Spring Boot 来源及背后 Spring Boot开发始于 2013 年,伴随Spring4.0而生,2014 年 4 月发布 1.0.0 版本.当前版本1.4.0,http://projec ...

  4. 26、驱动调试之根据oops信息和堆栈确定出错的代码

    a.驱动作为模块:1. 根据pc值确定该指令属于内核还是外加的模块pc=0xbf000018 它属于什么的地址?是内核还是通过insmod加载的驱动程序?先判断是否属于内核的地址: 看System.m ...

  5. [CSS] Target Positional Elements Using *-Of-Type CSS pseudo-classes

    Learn how to target elements based on their position inside of a parent element in relation to its s ...

  6. mysqldump备份脚本

    #!/bin/bash # 10 23 * * * /bin/bash /data/script/backup_mysqldump.sh BDATE=`date +%Y%m%d%H%M%S`BPATH ...

  7. 微信开发学习日记(五):weiphp开源框架的bug,公众号权限编辑问题

    最近在研究weiphp,总体感觉还行,bug据说还挺多. 这不,我就遇到一个比较严重影响使用的.感觉不太应该出现这么严重的bug啊. weiphp的微信公众号等级,权限增加和编辑bug,看不到权限列表 ...

  8. [CSS] Re-order the appearance of grid items using the order property

    As with flex items, we can set an order value on grid items. Let’s see how this affects the DOM and ...

  9. [React Router v4] Redirect to Another Page

    Overriding a browser's current location without breaking the back button or causing an infinite redi ...

  10. Kinect 摄像头范围介绍和玩家舒适距离实测

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接: http://blog.csdn.net/cartzhang/article/details/44588097 作者:ca ...