简明Python3教程 16.标准库
简介
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)。
一但程序开始运行,我们就可以检查这个文件以了解程序发生了什么,而用户并不会看到这些信息。
urllib与json模块
如果我们让自己编写的程序在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.标准库的更多相关文章
- 简明Python3教程(A Byte of Python 3)
关键字:[A Byte of Python v1.92(for Python 3.0)] [A Byte of Python3] 简明Python教程 Python教程 简明Python3教程 简明 ...
- 简明Python3教程 1.介绍
Python是少有的几种既强大又简单的编程语言.你将惊喜地发现通过使用Python即可轻松专注于解决问题而非和你所用的语言格式与结构. 下面是Python的官方介绍: Python is an eas ...
- 记阮一峰---JavaScript 标准参考教程之标准库-Object对象
在看到阮大神的-标准库-Object对象时 有个 类型判断类型 方法可能以后会用到.特此记录一下 4.3:toString()的应用:判断数据类型 Object.prototype.toString方 ...
- 简明Python3教程 15.异常
简介 当程序发生意外情况时则产生异常. 例如你需要读一个文件而这个文件并不存在会咋样?又或者是程序运行时你把它误删除了呢? 上述情形通过异常进行处理. 类似的,如果你的程序存在一些非法语句会发生什么呢 ...
- 简明Python3教程 12.问题解决
我们已经探究了python语言的方方面面,现在我们将通过设计编写一个有用的程序将这些内容有机的结合起来. 主要目标是让大家有能力独自编写程序. 问题 我们要解决的问题是”希望编写一个程序,用于创建所有 ...
- 简明Python3教程 10.模块
简介 现在你已经知道通过定义函数可以在你的程序中复用代码.但当你想在你编写的其他程序中复用大量函数怎么办呢? 也许你可以猜到了,办法就是利用模块. 有各种编写模块的方式,但最简单的方式是创建一个以.p ...
- 简明Python3教程 3.介绍
介绍 Python是少有的几种既强大又简单的编程语言.你将惊喜地发现通过使用Python即可轻松专注于解决问题而非和你所用的语言格式与结构. 下面是Python的官方介绍: Python is an ...
- 简明Python3教程 18.下一步是什么
如果你有认真通读本书之前的内容并且实践其中包含的大量例程,那么你现在一定可以熟练使用python了. 同时你可能也编写了一些程序用于验证python特性并提高你的python技能.如果还没有这样做的话 ...
- 简明Python3教程 6.基础
你肯定不满足于只打印"Hello World"吧? 你想要的更多 - 你希望得到一些输入,操纵它后再从中得到某些东西.我们可以使用python中的常量和变量实现这些功能. 字面常量 ...
随机推荐
- js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)
js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...
- jQuery获取多种input值的方法(转)
获取input的checked值是否为true: 第一种: if($("input[name=item][value='val']").attr('checked')==true) ...
- PL/SQL精明的调用栈分析
PL/SQL精明的调用栈分析 原文:http://www.oracle.com/technetwork/issue-archive/2014/14-jan/o14plsql-2045346.html ...
- Longest Increasing Subsequences(最长递增子序列)的两种DP实现
一.本文内容 最长递增子序列的两种动态规划算法实现,O(n^2)及O(nlogn). 二.问题描述 最长递增子序列:给定一个序列,从该序列找出最长的 升序/递增 子序列. 特点:1.子序列不要 ...
- js获取浏览器和元素对象的尺寸
1.屏幕尺寸 window.screen.height //屏幕分辨率的高 window.screen.width //屏幕分辨率的宽 window.screen.availHeight //屏幕可用 ...
- 【26.34%】【codeforces 722A】Broken Clock
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- js进阶 11-16 jquery如何查找元素的父亲、祖先和子代、后代
js进阶 11-16 jquery如何查找元素的父亲.祖先和子代.后代 一.总结 一句话总结:过滤或者查找的方法里面可以带参数进行进一步的选择. 1.parent()和parents()方法的区别是什 ...
- MySQL数据库定时自动备份脚本
Web系统,最重要的事项就是数据库的安全性和完整性. 定时做好备份,非常重要,千万不要在这个问题上偷懒.如果你的重要数据丢失了,会让你欲哭无泪. 导出表结构和数据 mysqldump -uroot ...
- jquery的mouseover和mouseout闪烁问题
$(document).ready(function(){ $(".anli").hover( function(){ var $div = $(this); t = setInt ...
- python 设计模式之 单例模式
单例模式是做为"全局变量"的替代品出现的.所以它具有全局变量的特点:全局可见.贯穿应用程序的整个生命期,保证在程序执行中,某个类仅仅存在一个实例,所以通常不希望类中的构造函数被调用 ...