Python常用标准库(一)

知识点介绍

Python拥有一个强大的标准库。Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。

Python标准库的主要功能有:

  • 文本处理,包含文本格式化、正则表达式匹配、文本差异计算与合并、Unicode支持,二进制数据处理等功能
  • 文件处理,包含文件操作、创建临时文件、文件压缩与归档、操作配置文件等功能
  • 操作系统功能,包含线程与进程支持、IO复用、日期与时间处理、调用系统函数、日志(logging)等功能
  • 网络通信,包含网络套接字,SSL加密通信、异步网络通信等功能
  • 网络协议,支持HTTP,FTP,SMTP,POP,IMAP,NNTP,XMLRPC等多种网络协议,并提供了编写网络服务器的框架
  • W3C格式支持,包含HTML,SGML,XML的处理。
  • 其它功能,包括国际化支持、数学运算、HASH、Tkinter等

系统环境

  • Linux Ubuntu 14.04
  • Python 3.6
  • Ipython
  • PyCharm

本实验共包含sys、os、glob、math、random、platform、pikle与cPikle、subprocess等8个标准库

实验步骤

1.sys模块:

sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时的配置以及资源,从而可以与前当程序之外的系统环境交互,如:Python解释器。

sys模块的常见函数列表:

(1) sys.argv 实现从程序外部向程序内部传递参数

sys.argv 变量是一个包含了命令行参数的字符串列表,利用命令行向程序传递参数.。其中,脚本的名称总是 sys.argv 列表的第一个参数。

argv[0] #代表本身名字

argv[1] #第一个参数

argv[2] #第二个参数

argv[3] #第三个参数

argv[N] #第N个参数

1.使用vim编辑一个test.py文件,内容如下:

#!/usr/bin/env python  
import sys  
print (sys.argv[0])  
print (sys.argv[1])  
print (sys.argv)  

2.传递一个参数argvtest,运行test.py文件

python test.py argvtest 

 结果为:

test.py
argvtest
['test.py','argvtest']

 

值得注意的是,argv既然是一个列表,那么可以通过len()函数获取这个列表的长度从而知道输入的参数数量。可以看到列表把自身文件名也写了进去,所以当我们统计的使用应该-1才是实际的参数数量,因此可以使用len(sys.argv[1:])获取参数长度。

(2)sys.exit(n)

sys.exit(n) 退出程序引发SystemExit异常,可以捕获异常并执行些清理工作。n默认值为0,表示正常退出。其他都是非正常退出,还可以sys.exit("sorry, goodbye!");一般主程序中使用此方式退出。

1.使用vim编辑一个exit.py文件,内容如下:

#!/usr/bin/python  
import sys  
  
print("hello world1")  
sys.exit(0)  
  
print("hello world2")  

 

2.运行exit.py文件

python exit.py  
结果为:
hello world1

 

(3)sys.path

模块搜索路径,可以将写好的模块放在该路径下,就可以在程序中import时正确找到

示例:

import sys  
  
sys.path  

 

输出的是一个列表,里面包含了当前Python解释器所能找到的模块目录。

(4)sys.modules

sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。它拥有字典所拥有的一切方法。

1.使用vim编辑一个modules.py文件,内容如下:

#!/usr/bin/python  
import sys  
  
print(sys.modules.keys())  
print("**************************************************************************")  
print(sys.modules.values())  
print("**************************************************************************")  
print(sys.modules["os"])  

 

2.运行modules.py文件

python modules.py

  (5)sys.stdin/sys.stdout/sys.stderr 

stdin,stdout,stderr包含与标准I/O流对应的流对象,如果需要更好地控制输出,而print不能满足我们的要求,它们就是我们所需要的。也可以替换它们,这时候我们可以重定向输出和输入到其它设备( device ),或者以非标准的方式处理它们。

1.测试一下标准输入:

import sys  
print('Hi, %s!' %input('Please enter your name: '))  

 

2.测试一下标准输出:

print('Hello World!\n')  

 

这就是从 标准输入:键盘 获取信息,再输出到 标准输出: 屏幕;

那么上面的例子中input和print是如何与标准输入/输出流 建立关系的呢?

其实Python程序的标准输入/输出/出错流定义在sys模块中,分别为: sys.stdin,sys.stdout,sys.stderr

上面的测试标准输入、输出程序与下列的程序是一样的:

3.使用vim编辑一个stdin.py文件,内容如下:

#!/usr/bin/python  
import sys  
print('Please enter your name:')  
name=sys.stdin.readline()[:-1]  
print('Hi, %s!' %name)  

 

4.运行stdin.py文件

python stdin.py  
结果为:
Please enter your name:
python
Hi,python!

 

5.使用vim编辑一个stdout.py文件,内容如下:

#!/usr/bin/python  
import sys  
sys.stdout.write('Hello World!\n')  

 

6.运行stdout.py文件

python stdout.py  
结果为:
Hello World!

 

7.sys.stderr一般是错误信息。stderr对象接收出错信息。

2.os模块:

在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路径进行操作,这就依赖于os模块

在Python界面可以通过help()命令查看os模块的详细介绍,按q退出help()

import os  
  
help(os)  

 

os以及其子模块包含的功能很多,这里我们介绍常用子模块

(1)关于path子模块:

(2)关于文件/目录/属性

(3)关于环境变量

(4)关于进程

3.glob模块:

文件查找,支持通配符(*、?、[])

1.创建a.sh、b.sh、c.sh、ab.sh

touch a.sh b.sh c.sh ab.sh 

2.查找目录中所有以.sh为后缀的文件

import glob  
  
glob.glob('/data/*.sh')  

3.查找目录中以单个字符命名并以.sh为后缀的文件

4.查找/data目录中的a.sh或b.sh的文件

4.math模块:

数字处理模块

5.random模块:

生成随机数

6.platform模块:

获取操作系统详细信息

7.pickle与cPickle模块:

创建可移植的Python序列化对象,持久化存储到文件

(1)pickle

pickle库有两个常用的方法,dump()、load() 和dumps()、 loads()

dump()方法是把对象保存到文件中。格式:dump(obj, file, protocol=None)

load()方法是从文件中读数据,重构为原来的Python对象。格式:load(file)

举例:

1.使用dump()方法将字典序列化到文件

import pickle  
  
dict = {'a':1,'b':2,'c':3}  
  
output = open('/data/data.plk','wb')  
  
pickle.dump(dict,output)  
  
output.close()  

2.使用load()方法读取data.plk文件

dumps()返回一个pickle格式化的字符串。格式:dumps(obj, protocol=None)

loads()解析pickle字符串为对象。

举例:

#创建安一个字符串s  
s = 'abc'  
#使用dumps()方法返回一个pickle格式化的字符串  
pkl = pickle.dumps(s)  
  
pkl  
#使用loads()方法解析pickle字符串为对象  
pickle.loads(pkl)  

(2)cPickle

cPickle库是C语言实现,对pickle进行了优化,提升了性能,代码中建议使用。cPicke提供了与pickle相同的dump()、load() 和dumps()、 loads()方法,用法一样。

8.subprocess模块:

subprocess库会fork一个子进程去执行任务,连接到子进程的标准输入、输出、错误,并获得它们的返回代码。这个模块将取代os.system、os.spawn*、os.popen*、popen2.*和commands.*。

(1)subprocess.call():运行命令与参数。等待命令完成,返回执行状态码。

#导入subprocess  
import subprocess  
方法一:  
subprocess.call(["ls", "-l"])  
方法二:  
subprocess.call('ls -l', shell=True)  

(2)subprocess.Popen():subprocess模块中只定义了一个类: Popen。

可以使用Popen来创建进程,并与进程进行复杂的交互。它的构造函数如下:

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

subprocess.Popen()类又提供的方法:

 

  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值