标准库

Python 标准库(Python Standrad Library)中包含了大量有用的模块,同时也是每个标准的 Python 安装包中的一部分。熟悉 Python 标准库十分重要,因为只要你熟知这些库可以做到什么事,许多问题都能够轻易解决。

我们将探索这个库中的一些常用模块。你能在你的 Python 安装包中附带的文档中的“库概览(Library Reference)” 部分中查找到所有模块的全部细节。

让我们来了解一些有用的模块。

注意:如果你觉得本章内容过于超前,你可以先跳过本章。不过,我强烈建议你在适应了采用 Python 进行编程后再来看看本章。

sys 模块

sys 模块包括了一些针对特定系统的功能。我们已经了解过 sys.argv 列表中包括了命令行参数。

想象一些我们需要检查正在使用的 Python 软件的版本,sys 模块会给我们相关的信息。

>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=5, micro=1, releaselevel='final', serial=0)
>>> sys.version_info.major == 3
True

它是如何工作的

sys 模块包含一个 version_info 元组,它提供给我们版本信息。第一个条目是主版本信息。我们可以调出这些信息并使用它。

日志模块

如果你想将一些调试(Debugging)信息或一些重要的信息储存在某个地方,以便你可以检查你的程序是否如你所期望那般运行,应该怎么做?你应该如何将这些信息“储存在某个地方”?这可以通过 logging 模块来实现。

保存为 stdlib_logging.py

import os
import platform
import 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')

print("Logging to", logging_file)

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 stdlib_logging.py
Logging to /Users/swa/test.log

$ cat /Users/swa/test.log
2014-03-29 09:27:36,660 : DEBUG : Start of the program
2014-03-29 09:27:36,660 : INFO : Doing something
2014-03-29 09:27:36,660 : WARNING : Dying now

如果你不能运行 cat 命令,你可以通过一款文本编辑器打开 test.log 文件。

它是如何工作的

我们使用了三款标准库中的模块——os 模块用以和操作系统交互,platform 模块用以获取平台——操作系统——的信息,logging 模块用来记录(Log)信息。

首先,我们通过检查 platform.platform() 返回的字符串来确认我们正在使用的操作系统(有关更多信息,请参阅import platform; help(platform))。如果它是 Windows,我们将找出其主驱动器(Home Drive),主文件夹(Home Folder)以及我们希望存储信息的文件名。将这三个部分汇聚到一起,我们得到了有关文件的全部位置信息。对于其它平台而言,我们需要知道的只是用户的主文件夹位置,这样我们就可获得文件的全部位置信息。

我们使用 os.path.join() 函数来将这三部分位置信息聚合到一起。使用这一特殊函数,而非仅仅将这几段字符串拼凑在一起的原因是这个函数会确保完整的位置路径符合当前操作系统的预期格式。

然后我们配置 logging 模块,让它以特定的格式将所有信息写入我们指定的文件。

最后,无论这些信息是用以调试,提醒,警告甚至是其它关键的消息,我们都可以将其聚合并记录。一旦程序开始运行,我们可以检查这一文件,从而我们便能知道程序运行过程中究竟发生了什么,哪怕在用户运行时什么信息都没有显示。

每周模块系列

标准库中还有许多模块值得探索,例如一些用以调试(Debugging)的模块处理命令行选项的模块正则表达式(Regular Expressions)模块 等等等等。

进一步探索标准库的最好方法是阅读由 Doug Hellmann 撰写的优秀的 Python Module of the Week 系列(你还可以阅读它的实体书或是阅读 Python 官方文档)。

总结

我们已经探索了 Python 标准库中提供的诸多的模块的一些功能。在此强烈建议你浏览 Python 标准库文档来了解所有可以使用的模块。

接下来,我们将介绍 Python 的其它各个方面,让我们的 Python 之旅更加完整