简明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)。

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

 

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之旅更加完整

 

 

 

--------------Python书籍推荐-----------------
Python基础教程-第2版.修订版 
购买地址1  购买地址2
PYTHON核心编程
购买地址1  购买地址2
零基础学Python
购买地址1  购买地址2

转载于:https://www.cnblogs.com/txw1958/archive/2012/12/10/A_Byte_of_Python3_Standard_Library.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php中的address,html中address是什么意思?(代码示例)

本篇文章主要介绍了关于address标签用法。或许有些朋友对于address标签有点陌生&#xff0c;也会产生address是什么意思的疑问&#xff0c;毕竟在我们日常建站过程中&#xff0c;很少会用到这个标签。但是俗话说&#xff0c;存在即合理。html里每一个标签都有他自己的定义和用处…

存储过程没有执行完后没有释放锁_面试必问---synchronized实现原理及锁升级过程你懂吗?...

synchronized实现原理及锁升级过程前言:synchronized是Java内置的机制&#xff0c;是JVM层面的&#xff0c;而Lock则是接口&#xff0c;是JDK层面的尽管最初synchronized的性能效率比较差&#xff0c;但是随着版本的升级&#xff0c;synchronized已经变得原来越强大了,本文带大…

Hibernate C3P0连接池配置

本文向大家介绍Hibernate C3P0连接池&#xff0c;可能好多人还不了解Hibernate C3P0连接池&#xff0c;没有关系&#xff0c;看完本文你肯定有不少收获&#xff0c;希望本文能教会你更多东西。 Hibernate自带的连接池算法相当不成熟。 它只是为了让你快些上手&#xff0c;并不适…

怎样在vs中监视char*字符串_字符串指针数据类型

一、前言在实际开发中&#xff0c;特别是芯片开发中&#xff0c;例如智能传感器芯片&#xff0c;经常直接使用C语言指针数据类型来操作寄存器。那么字符串指针就是我们常见的操作。C语言没有单独的字符串对象&#xff0c;它是通过数组的形式来表示字符串的&#xff1a;#include…

mac json格式化工具_一个在 MAC 上 iOS/Flutter 开发的辅助工具

大家好&#xff0c;我是章鱼猫。今天给大家推荐的这个开源项目&#xff0c;是来自于我们公众号读者的投稿&#xff0c;这个东西还挺好的。如果你作为读者&#xff0c;也有自己的开源项目或者你也有想推荐的开源项目&#xff0c;都可以向我们投稿&#xff0c;我们就是致力于帮助…

php转换图片属性a,PHP 提取图片img标记中的任意属性

/* PHP正则提取图片img标记中的任意属性 */$str PHP正则提取或更改图片img标记中的任意属性;//1、取整个图片代码preg_match(/]*?src\s*\s*(\|\")(.*?)\\1[^>]*?\/?\s*>/i,$str,$match);echo $match[0];//2、取width属性preg_match(//i,$str,$match);echo $mat…

卡巴斯基授权许可文件_制片方未提供电视台授权证明,构成根本违约吗?

在制作娱乐法101课程的过程中&#xff0c;需要检索很多案例&#xff0c;有时候也也看到一些似乎不太合理的判决书。在一起电视播映权纠纷中&#xff0c;合同中一般会常规约定制作方需要向电视台提交确保其在合同授权区域、授权范围、授权期限内具有合法播映权的证明文件的合同义…

月头月尾oracle取数,Oracle分析函数Over()的使用

今天为完成客户成品仓盘点的统计功能&#xff0c;做了盘点统计表&#xff0c;这个功能有点复杂&#xff0c;要将生产数据与库存的差异做成一个统计报表&#xff0c;报表要反映出差异的明细。其实&#xff0c;这个项目拖了也挺久了&#xff0c;本来客户计划用于2018年终盘点&…

一个快递小伙子带给我们的启示:认真有力量

今天加班一天&#xff0c;合肥漫天飞雪&#xff0c;出门就开始下&#xff0c;到了公司&#xff0c;这个世界全白了&#xff0c;看到了这篇文章&#xff0c;贴出来于大家共享&#xff01;认真有力量&#xff0c;大家认真努力工作哈&#xff01; 他是个快递小子&#xff0c;20岁出…

数据库的应用详解三

数据库的应用详解三 数据库的应用详解三 承接上一篇文章:《ADO.NET实例教学二》中设计到的多条件搜索的内容&#xff0c;下面我们就先针对这部分的内容进行深入的讲解。 一、做好准备 在什么情况下会遇到多条件搜索呢&#xff1f;在生活中有没有遇到类似的多条件搜索的情况。在…

粒子群 多目标 matlab_matlab 粒子群求解三角形垂心位置

续 https://www.toutiao.com/i6766960319995576843/设定三角形A顶点的坐标为 (x1,y1);(x2,y2);(x3,y3);随机初始化&#xff1b;计算得知垂心到三个顶点距离为&#xff1a;R(((x1^2 - 2*x1*x2 x2^2 y1^2 - 2*y1*y2 y2^2)*(x1^2 - 2*x1*x3 x3^2 y1^2 - 2*y1*y3 y3^2)*(x2^2…

【转】Windows Server2008 R2下安装Oracle 10g

因开发环境需要&#xff0c;在Windows Server 2008 R2 Enterprise64位系统上安装Oracle 10g。去Oracle 官方网站下载了Oracle Database 10g Release 2 (10.2.0.4) for Microsoft Windows Vista x64, Microsoft Windows Server 2008 R2 x64, Windows 7 x64。 可刚执行安装&am…

mysqlworkbench导入sql文件_将sql脚本文件导入数据库

一、用cmd的调试环境导入.sql文件中的数据&#xff1a;WinR键打开cmd输入&#xff1a;MySQL -u root -p 输入密码&#xff1a;*******进入MySQL后MySQL>show databases; --查看所有数据库MySQL>create database mydatabase&#xff1b; --创建数据库 MySQL>use mydata…

linux创建目录的语句,Linux的 文件 和 目录 管理(基本语句)

包括了文件和目录的创建、删除、修改&#xff0c;权限、压缩、搜索、分区、挂载简单的一些命令&#xff1a;【 pwd 】查看当前所在目录【 cd .. 】上级目录【 cd ~ 】当前用户的家目录【cd -】上次打开目录(回看)【 rmdir 目录名】删除空目录【du -sh 文件或目录】查看文件或目…

sql怎么读_大白话讲解脏写、脏读、不可重复读和幻读

一般对于我们的业务系统去访问数据库而言&#xff0c;它往往是多个线程并发执行多个事务的&#xff0c;对于数据库而言&#xff0c;它会有多个事务同时执行&#xff0c;可能这多个事务还会同时更新和查询同一条数据&#xff0c;所以这里会有一些问题需要数据库来解决我们来看看…

Android上试用Linphone(Free SIP VOIP Client)

1. 下载Linphone apk并且安装到两个Android手机上http://www.linphone.org/eng/download/packages/android.html2. 申请两个免费的SIP帐号进行测试https://www.ekiga.net/3. 在每个Android手机上分别配置Linphone应用程序点击Settings菜单, 在SIP Account界面分别配置如下:User…

debian 升级linux内核,Debian8升级内核到4.5

本文讲述如何升级Debian8的内核到4.5版本0x01&#xff1a;去linux kernel官网https://www.kernel.org/下载4.5的内核&#xff0c;选择tar.xz格式0x02&#xff1a;想办法把下载好的包弄进你的虚拟机或...直接你的物理机0x03&#xff1a;解压有的朋友可能没见过tar.xz格式的包&am…

软件安全测试报告模板_软件测试工程师经典面试题

软件测试工程师&#xff0c;和开发工程师相比起来&#xff0c;虽然前期可能不会太深&#xff0c;但是涉及的面还是比较广的。前期面试实习生或者一年左右的岗位&#xff0c;问的也主要是一些基础性的问题比较多。涉及的知识主要有MySQL数据库的使用、Linux操作系统的使用、软件…

OD使用教程20 - 调试篇20

OD使用教程20 - 调试篇20 让编程改变世界 Change the world by program 名词注释&#xff1a;Keygen为Key Generator的缩写&#xff0c;就是我们一般所说的注册机。是软件注册生成所需的注册码或序列号的程序。 keygen可以独立做一个可执行程序存在&#xff0c;也可以作为程序…