简介

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. C#无符号右移

    /// <summary>         /// 无符号右移,与JS中的>>>等价         /// </summary>         /// & ...

  2. 【Codeforces Round #439 (Div. 2) A】The Artful Expedient

    [链接] 链接 [题意] [题解] 暴力 [错的次数] 在这里输入错的次数 [反思] 在这里输入反思 [代码] #include <bits/stdc++.h> using namespa ...

  3. Deep Learning for Nature Language Processing --- 第四讲(下)

    A note on matrix implementations 将J对softmax的权重W和每一个word vector进行求导: 尽量使用矩阵运算(向量化).不要使用for loop. 模型训练 ...

  4. xmpp即时通讯协议的特性---长处和缺点!

    xmpp协议的定义? XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性. 因此.基于XMPP的应用具有超强的可扩展性.经过扩展以后的XMPP能够通过发送扩展的信 ...

  5. [内核编程] 4.5 HOOK分发函数

    4.5 HOOK分发函数 本节开始深入的探讨键盘的过滤与反过滤.有趣的是,无论是过滤还是反过 滤,其原理都是进行过滤.取胜的关键在于:谁将第一个得到信息. 黑客可能会通过修改一个已经存在的驱动对象(比 ...

  6. [RxJS] Add debug method to Observable in TypeScript

    Observable.prototype.debug = function(message: any) { return this.do( (next) => { if(!environment ...

  7. JVM 调优 —— OutOfMemory

    零. 简单介绍 OutOfMemory 意思就是须要申请更大的内存, 可是内存限制无法申请到须要的内存. 一. 解决方法 基本上解决方向有两种: 检查程序是否有问题. 是不是写死循环不停地创建并持有对 ...

  8. [React] Pass Data To Event Handlers with Partial Function Application

    In this lesson we’ll see how to pass an item’s id value in an event handler and get the state to ref ...

  9. PHP/HTML混写的四种方式总结

    PHP/HTML混写的四种方式总结 一.总结 一句话总结: 注意点: 1.双引号里面解析变量:echo "$Content" 2.HEREDOC和NOWDOC的关系:类似于双引号包 ...

  10. 虚拟机的ip网络设置的选择

    首先看一下vm的这几个设置 通过截图可以基本看到几个网络设置的区别,具体体现在虚拟机装好以后,网络设置会多出两个适配器,不同模式会分配不同区段的ip,需要固定时主要区段要求 所以总结一下 1.桥连,适 ...