python3 第三十二章 - 标准库概览
1. 操作系统接口
os 模块提供很多函数与操作系统进行交互︰
- >>> import os
- >>> os.getcwd() # 返回当前的工作目录
- 'C:\\Python35'
- >>> os.chdir('/server/accesslogs') # 修改当前的工作目录
- >>> os.system('mkdir today') # 执行系统命令 mkdir
- 0
确保使用import os而不是from os import *。这样可以防止函数os.open()覆盖内建函数open(),两者之间的操作是很不同的。
内建函数dir()和help()对os这样的大型模块提供交互式的帮助是很有用的:
- >>> import os
- >>> dir(os)
- <returns a list of all module functions>
- >>> help(os)
- <returns an extensive manual page created from the module's docstrings>
对于日常的文件和目录管理任务, 这 shutil 模块提供了一个简单好用的高级接口:
- >>> import shutil
- >>> shutil.copyfile('data.db', 'archive.db')
- 'archive.db'
- >>> shutil.move('/build/executables', 'installdir')
- 'installdir'
2. 文件通配符
glob模块提供一个对目录中的文件进行通配符搜索的函数:
- >>> import glob
- >>> glob.glob('*.py')
- ['primes.py', 'random.py', 'quote.py']
3. 命令行参数
常见的实用程序脚本通常需要处理命令行参数。那些参数以列表的形式存储在sys 模块的 argv 属性中.例如下面在命令行中运行python demo.py one two three 的输出结果:
- >>> import sys
- >>> print(sys.argv)
- ['demo.py', 'one', 'two', 'three']
getopt 模块处理sys.argv u时使用getopt()函数的约定。argparse 模块提供更加灵活和强大的命令行处理。
4. 错误输出重定向和程序终止
sys 模块也有 stdin, stdout, stderr( 标准输入、 标准输出 和 标准错误) 的属性。即使在stdout被重定向时,后者也可以用于显示警告和错误信息:
- >>> sys.stderr.write('Warning, log file not found starting a new one\n')
- Warning, log file not found starting a new one
终止脚本的最直接方法是使用 sys.exit()
5. 字符串模板匹配
re 模块为高级字符串处理提供了正则表达式工具。对于复杂的匹配和操作,正则表达式提供了简洁、优化的解决方案:
- >>> import re
- >>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
- ['foot', 'fell', 'fastest']
- >>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
- 'cat in the hat'
当只需要简单的功能时,最好使用字符串方法,因为它们更容易阅读和调试:
- >>> 'tea for too'.replace('too', 'two')
- 'tea for two'
6. 数学
math模块提供基于c库函数的浮点运算.
- >>> import math
- >>> math.cos(math.pi / 4)
- 0.70710678118654757
- >>> math.log(1024, 2)
- 10.0
random 的模块提供了进行随机选择的工具︰
- >>> import random
- >>> random.choice(['apple', 'pear', 'banana'])
- 'apple'
- >>> random.sample(range(100), 10) # sampling without replacement
- [30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
- >>> random.random() # random float
- 0.17970987693706186
- >>> random.randrange(6) # random integer chosen from range(6)
- 4
statistics 模块计算数值数据的基本统计特性 (均值、 中位数、 方差,等)。e :
- >>> import statistics
- >>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
- >>> statistics.mean(data)
- 1.6071428571428572
- >>> statistics.median(data)
- 1.25
- >>> statistics.variance(data)
- 1.3720238095238095
SciPy 项目 https://scipy.org 有数值计算的许多其他模块。
7. 互联网访问(3.5.2urllib中无request 属性)
有很多的模块用于访问互联网和处理的互联网协议。最简单的两个是用于网络访问的 urllib.request 和用于发送邮件的 smtplib
- >>> from urllib.request import urlopen
- >>> with urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl') as response:
- ... for line in response:
- ... line = line.decode('utf-8') # Decoding the binary data to text.
- ... if 'EST' in line or 'EDT' in line: # look for Eastern Time
- ... print(line)
- <BR>Nov. 25, 09:43:32 PM EST
- >>> import smtplib
- >>> server = smtplib.SMTP('localhost')
- >>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
- ... """To: jcaesar@example.org
- ... From: soothsayer@example.org
- ...
- ... Beware the Ides of March.
- ... """)
- >>> server.quit()
(请注意第二个示例需要在本地主机上运行邮件服务器)。
8. 日期和时间
datetime模块提供了处理日期和时间的简单和复杂的方法。支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出。该模块还支持处理时区。
- >>> # dates are easily constructed and formatted
- >>> from datetime import date
- >>> now = date.today()
- >>> now
- datetime.date(2003, 12, 2)
- >>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
- '12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'
- >>> # dates support calendar arithmetic
- >>> birthday = date(1964, 7, 31)
- >>> age = now - birthday
- >>> age.days
- 14368
9. 数据压缩
通常的数据归档和压缩格式由以下模块直接支持,包括:zlib,gzip,bz2,lzma zipfile和tarfile。
- >>> import zlib
- >>> s = b'witch which has which witches wrist watch'
- >>> len(s)
- 41
- >>> t = zlib.compress(s)
- >>> len(t)
- 37
- >>> zlib.decompress(t)
- b'witch which has which witches wrist watch'
- >>> zlib.crc32(s)
- 226805979
10. 性能测量
一些 Python 用户对同一问题的不同解决方法之间的性能差异深有兴趣。Python 提供了的一个度量工具可以立即解决这些问题。
例如,使用元组封装和拆封功能而不是传统的方法来交换参数可能会更吸引人。timeit模块能够快速演示一个适度的性能优势:
- >>> from timeit import Timer
- >>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
- 0.57535828626024577
- >>> Timer('a,b = b,a', 'a=1; b=2').timeit()
- 0.54962537085770791
与timeit的精细粒度相对比,profileand pstats模块提供了识别时间跨度较大的代码的工具。
11. 质量控制
开发高质量软件的方法之一是为每一个函数编写测试代码,并且在开发过程中经常性的运行这些测试代码。
doctest模块为 扫描模块 和 验证测试 提供了一个嵌入程序文档中的工具。测试的构造像一个把结果剪切并粘贴到文档字符串的典型调用一样简单。通过用户提供的例子,它发展了文档,允许 doctest 模块确认代码的结果是否与文档一致:
- def average(values):
- """Computes the arithmetic mean of a list of numbers.
- >>> print(average([20, 30, 70]))
- 40.0
- """
- return sum(values) / len(values)
- import doctest
- doctest.testmod() # automatically validate the embedded tests
unittest模块并不像doctest模块那么轻松,但它允许在单独的文件中维护一组更全面的测试:
- import unittest
- class TestStatisticalFunctions(unittest.TestCase):
- def test_average(self):
- self.assertEqual(average([20, 30, 70]), 40.0)
- self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
- with self.assertRaises(ZeroDivisionError):
- average([])
- with self.assertRaises(TypeError):
- average(20, 30, 70)
- unittest.main() # Calling from the command line invokes all tests
12. Batteries Included
Python 有"Batteries Included"的哲学。这最好是通过其较大的文件包的先进和强大功能。例如:
- xmlrpc.client和xmlrpc.server模块使得实现远程过程调用成为一个非常简单的任务。尽管模块名称包含XML,但不需要直接了解或处理XML。
- email包是用于管理电子邮件(包括MIME和其他基于RFC 2822的邮件文档)的库。与实际发送和接收邮件的smtplib和poplib不同,email包有一个完整的工具集,用于构建或解码复杂的邮件结构(包括附件)和实现互联网编码和头协议。
- json包为解析这种流行的数据交换格式提供了强大的支持。csv模块支持以逗号分隔值格式直接读取和写入文件,通常由数据库和电子表格支持。XML处理由xml.etree.ElementTree,xml.dom和xml.sax包支持。这些模块和包一起大大简化了 Python 应用程序和其他工具之间的数据交换。
- sqlite3模块是SQLite数据库库的包装器,提供可以使用稍微非标准的SQL语法进行更新和访问的持久性数据库。
- 国际化由许多模块支持,包括gettext、locale和编解码器包。
python3 第三十二章 - 标准库概览的更多相关文章
- Gradle 1.12用户指南翻译——第二十二章. 标准的 Gradle 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第三十二章. JDepend 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- “全栈2019”Java多线程第三十二章:显式锁Lock等待唤醒机制详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java第三十二章:增强for循环Foreach语法
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- python3 第三十三章 - 标准库概览Part II
第二部分提供了更高级的模块用来支持专业编程的需要.这些模块很少出现在小型的脚本里. 1. 输出格式化reprlib 模块提供了一个用来缩写显示大型或深层嵌套容器的 定制版repr() . >&g ...
- 【WPF学习】第三十二章 执行命令
前面章节已经对命令进行了深入分析,分析了基类和接口以及WPF提供的命令库.但尚未例举任何使用这些命令的例子. 如前所述,RoutedUICommand类没有任何硬编码的功能,而是只表达命令,为触发命令 ...
- 第三十二章、使用splitDockWidget和tabifyDockWidget嵌套布局QDockWidget的PyQt人机对话案例
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 在第<第三十一章.containers容器类部件QDo ...
- SpringBoot | 第三十二章:事件的发布和监听
前言 今天去官网查看spring boot资料时,在特性中看见了系统的事件及监听章节.想想,spring的事件应该是在3.x版本就发布的功能了,并越来越完善,其为bean和bean之间的消息通信提供了 ...
- 第三十二章 Linux常规练习题(一)
一.练习题一 1.超级用户(管理员用户)提示符是____,普通用户提示符是____.2.linux关机重启的命令有哪些 ?3.bash是什么?4.bash特性, 常见的bash特性有哪些?5.网卡的配 ...
随机推荐
- 再见:org.apache.catalina.connector.ClientAbortException: java.io.IOException: Connection reset by peer
这个问题我之前遇见多次了,今天又遇见了 2019-03-22 16:33:27.555 WebMvcConfigurer.java:144 ERROR - 接口 [/appservice/7za.ex ...
- Flask框架里的cookie和session
# -*- encoding: utf-8 -*- #cookie 相关的操作,依赖与make_response库,调用cookie依赖request模块 from flask import Flas ...
- orcal - 分组
执行顺序 from where group by having select order by 多表查询与分组查询的时候,查询结果相当于是一张临时表,所有的分组是在临时表操作 分组统计查询 COUNT ...
- 在引用阿里云库或其他库的时候,经常发生框架不兼容(原因是系统采用:Microsoft .NET Framework 4 Client Profile ),请改为Microsoft .NET Framework 4
在引用阿里云库或其他库的时候,经常发生框架不兼容(原因是系统采用:Microsoft .NET Framework 4 Client Profile ),请改为Microsoft .NET Frame ...
- 用java输入分数,得出分数等级
import java.util.Scanner;public class F { public static void main(String[] args) { // TODO 自动生成的方法 ...
- @PostConstruct注解小结
1.在具体Bean的实例化过程中,@PostConstruct注解的方法,会在构造方法之后,init方法之前进行调用2.在项目中@PostConstruct主要应用场景是在初始化Servlet时加载一 ...
- Image Storage
- centos 7.2 同步北京时间 ,多台机器同步时间
linux 系统没有北京时间,同步的是上海时间 linux 系统有两个时钟:一个是硬件时钟,即BIOS时间:另一个是系统时钟,是linux系统Kernel(内核)时间. 系统开启时,系统会读取硬件时间 ...
- Java学习笔记 -- Java定时调度工具Timer类
1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...
- 鱼骨时间轴案例(转自CSDN,原文链接附于文中)
$.fn.fishBone = function(data) { var colors = ['#F89782','#1A84CE']; /**入口*/ //1.创建dom $(this).child ...