zoukankan      html  css  js  c++  java
  • 简明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版.修订版 
     
     
    PYTHON核心编程
     
     
    零基础学Python
    服务项目 技术咨询 微信图书 微信视频 微信代码 定制开发 其他福利
    服务入口 QQ群有问必答
    查看详情
    一本书解决90%问题
    查看详情
    微信开发视频
    小程序开发视频
    免费代码
    ¥1888阿里云代金券
    查看详情
    营销工具
    微信特异功能
  • 相关阅读:
    [BZOJ5020] [THUWC 2017]在美妙的数学王国中畅游
    [BZOJ3876] [AHOI2014&JSOI2014]支线剧情
    [BZOJ5120] [2017国家集训队测试]无限之环
    [BZOJ2959] 长跑
    [BZOJ2502] 清理雪道
    SSM-MyBatis-08:Mybatis中SqlSession的commit方法为什么会造成事物的提交
    SSM-MyBatis-07:Mybatis中SqlSession的insert和delete底层到底做了什么
    SSM-MyBatis-06:Mybatis中openSession到底做了什么
    SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper
    SSM-MyBatis-04:Mybatis中使用properties整合jdbc.properties
  • 原文地址:https://www.cnblogs.com/txw1958/p/A_Byte_of_Python3_Standard_Library.html
Copyright © 2011-2022 走看看