标准库


12

12.1 简介

Python 标准库是随Python附带安装的,它包含大量极其有用的模块。熟悉

Python 标准库是十分重要的,因为如果你熟悉这些库中的模块,那么你的大多数问题

都可以简单快捷地使用它们来解决。

12.2  sys模块

sys 模块包含了系统指定的函数功能。一般我想了解些系统相关的信息时会用到这个模块。

代码示例:



import sys



(
)
(sys.version_info)


执行结果:

sys.version_info(major=3, minor=6, micro=0, releaselevel='final',serial=0)

注:我们可以看出当前python的版本是3.6.0

常用方法列表:

方法

功能描述

sys.argv

命令行参数List,第一个元素是程序本身路径

sys.path

返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

sys.modules.keys()

返回所有已经导入的模块列表

sys.modules

返回系统导入的模块字段,key是模块名,value是模块   

sys.exc_info()

获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息

sys.exit(n)

退出程序,正常退出时exit(0)  

sys.hexversion

获取Python解释程序的版本值,16进制格式如:0x020403F0

sys.version

获取Python解释程序的版本信息 

sys.platform

返回操作系统平台名称

sys.stdout

标准输出

sys.stdout.write('aaa')

标准输出内容

sys.stdout.writelines()

无换行输出

sys.stdin

标准输入

sys.stdin.read()

输入一行

sys.stderr

错误输出

sys.exc_clear()

用来清除当前线程所出现的当前的或最近的错误信息

sys.exec_prefix

返回平台独立的python文件安装的位置

sys.byteorder

本地字节规则的指示器,big-endian平台的值是'big',little-endian平台的值是'little'

sys.copyright

记录python版权相关的东西

sys.api_version

解释器的C的API版本

sys.version_info

'final'表示最终,也有'candidate'表示候选,表示版本级别,是否有后继的发行

sys.getdefaultencoding()

返回当前你所用的默认的字符编码格式

sys.getfilesystemencoding()

返回将Unicode文件名转换成系统文件名的编码的名字

sys.builtin_module_names

Python解释器导入的内建模块列表

sys.executable

Python解释程序路径

sys.getwindowsversion()

获取Windows的版本

sys.stdin.readline()

从标准输入读一行,sys.stdout.write("a")屏幕输出a

sys.setdefaultencoding(name)

用来设置当前默认的字符编码(详细使用参考文档)

sys.displayhook(value)

如果value非空,这个函数会把他输出到sys.stdout(详细使用参考文档)

12.3  os模块

os模块封装了常用的文件以及目录操作。

代码示例:

import
.makedirs(
)
.rename(
,
)

执行结果:

注:会在D盘的tmp下创建xiaodang目录

将xiaodang改名为xiaodaobiancheng

常用方法列表:

方法

功能描述

os.remove()

删除文件

os.unlink()

删除文件

os.rename()

重命名文件

os.listdir()

列出指定目录下所有文件

os.chdir()

改变当前工作目录

os.getcwd()

获取当前文件路径

os.mkdir()

新建目录

os.rmdir()

删除空目录(删除非空目录,使用shutil.rmtree())

os.makedirs()

创建多级目录

os.removedirs()

删除多级目录

os.stat(file)

获取文件属性

os.chmod(file)

修改文件权限

os.utime(file)

修改文件时间戳

os.name(file)

获取操作系统标识

os.system()

执行操作系统命令

os.execvp()

启动一个新进程

os.fork()

获取父进程ID,在子进程返回中返回0

os.execvp()

执行外部程序脚本(Uinx)

os.spawn()

执行外部程序脚本(Windows)

os.access(path,mode)

判断文件权限(详细参考cnblogs)

os.wait()

暂时未知

12.4  os.path模块

这个模块封装了对系统路径的常用的操作。

代码示例:

import 
.path
(
.path.abspath(
))
(
.path.split(
))

执行结果:

C:\demo\practise.py

('D:\\tmp', 'xiaodang')

常见方法列表:

方法

功能描述

os.path.split(filename)

将文件路径和文件名分割(会将最后一个目录作为文件名而分离)

os.path.splitext(filename)

将文件路径和文件扩展名分割成一个元组

os.path.dirname(filename)

返回文件路径的目录部分

os.path.basename(filename)

返回文件路径的文件名部分

os.path.join(dirname,basename)

将文件路径和文件名凑成完整文件路径

os.path.abspath(name)

获得绝对路径

os.path.splitunc(path)

把路径分割为挂载点和文件名

os.path.normpath(path)

规范path字符串形式

os.path.exists()

判断文件或目录是否存在

os.path.isabs()

如果path是绝对路径,返回True

os.path.realpath(path)

返回path的真实路径

os.path.relpath(path[,start])

从start开始计算相对路径

os.path.normcase(path)

转换path的大小写和斜杠

os.path.isdir()

判断name是不是一个目录,name不是目录就返回false

os.path.isfile()

判断name是不是一个文件,不存在返回false

os.path.islink()

判断文件是否连接文件,返回boolean

os.path.ismount()

指定路径是否存在且为一个挂载点,返回boolean

os.path.samefile()

是否相同路径的文件,返回boolean

os.path.getatime()

返回最近访问时间浮点型

os.path.getmtime()

返回上一次修改时间浮点型

os.path.getctime()

返回文件创建时间浮点型

os.path.getsize()

返回文件大小字节单位

os.path.commonprefix(list)

返回list(多个路径)中,所有path共有的最长的路径

os.path.lexists#

路径存在则返回True,路径损坏也返回True

os.path.expanduser(path)

把path中包含的"~"和"~user"转换成用户目录

os.path.expandvars(path)

根据环境变量的值替换path中包含的”$name”和”${name}”

os.path.sameopenfile(fp1,fp2)

判断fp1和fp2是否指向同一文件

os.path.samestat(stat1,stat2)

判断stattuplestat1和stat2是否指向同一个文件

os.path.splitdrive(path)

一般用在windows下,返回驱动器名和路径组成的元组

os.path.walk(path,visit,arg)

遍历path,给每个path执行一个函数详细见手册

os.path.supports_unicode_filenames()

设置是否支持unicode路径名

12.5  stat模块

stat模块可以获取文件的属性方面的详细信息。

代码示例:


import stat
import datetime
fileStats = 
.stat(
)
(
+(fileStats[stat.ST_SIZE]).__str__()+
)
(
 +datetime.datetime.fromtimestamp(fileStats[stat.ST_MTIME]).__str__())

执行结果:

文件大小为:102个字节

最后的修改时间:2017-03-16 10:42:34

常见方法列表:

方法

功能描述

fileStats = os.stat(path)

获取到的文件属性列表

fileStats[stat.ST_MODE]

获取文件的模式

fileStats[stat.ST_SIZE]

文件大小

fileStats[stat.ST_MTIME]

文件最后修改时间

fileStats[stat.ST_ATIME]

文件最后访问时间

fileStats[stat.ST_CTIME]

文件创建时间

stat.S_ISDIR(fileStats[stat.ST_MODE

是否目录

stat.S_ISREG(fileStats[stat.ST_MODE])

是否一般文件

stat.S_ISLNK(fileStats[stat.ST_MODE])

是否连接文件

stat.S_ISSOCK(fileStats[stat.ST_MODE])

是否COCK文件

stat.S_ISFIFO(fileStats[stat.ST_MODE])

是否命名管道

stat.S_ISBLK(fileStats[stat.ST_MODE])

是否块设备

stat.S_ISCHR(fileStats[stat.ST_MODE])

是否字符设置

12.6  datetime模块

datetime模块存放了常用的时间、日期处理。通过引用该模块我们很方便的进行时间与字符串的转换,时间和日期的转换,时间元组与时间的转换,时间的属性提取等方面的操作。

代码示例:

from datetime import datetime, date,
d = date(
, 
, 
)



print("输出个YYYY-MM-DD格式的时间字符串:"+d.isoformat())



print("星期"+(d.weekday()+1).__str__())



print(d.isocalendar())



print(datetime.strptime('2014-03-16 12:21:21',"%Y-%m-%d%H:%M:%S"))



print(datetime.now().timetuple())



输出结果:

输出个YYYY-MM-DD格式的时间字符串:2017-03-22

星期3

(2017, 12, 3)

2014-03-1612:21:21

time.struct_time(tm_year=2017,tm_mon=3, tm_mday=22, tm_hour=16, tm_min=10, tm_sec=51, tm_wday=2, tm_yday=81,tm_isdst=-1)

常用方法列表:

方法

功能描述

datetime.date.today()

本地日期对象,(用str函数可得到它的字面表示(2014-03-24)) 

datetime.date.isoformat(obj)

当前[年-月-日]字符串表示(2014-03-24) 

datetime.date.fromtimestamp()

返回一个日期对象,参数是时间戳,返回 [年-月-日] 

datetime.date.weekday(obj)

返回一个日期对象的星期数,周一是0 

datetime.date.isoweekday(obj)

返回一个日期对象的星期数,周一是1 

datetime.date.isocalendar(obj)

把日期对象返回一个带有年月日的元组

datetime.date.fromtimestamp(timestamp[,tz])

按时间戳返回一个date对象,可指定时区

datetime.datetime.today()

返回一个包含本地时间(含微秒数)的datetime对象 2014-03-24 23:31:50.419000 

datetime.datetime.now([tz])

返回指定时区的datetime对象 2014-03-24 23:31:50.419000 

datetime.datetime.utcnow()

返回一个零时区的datetime对象 

datetime.datetime.fromtimestamp(timestamp[,tz])

按时间戳返回一个datetime对象,可指定时区

datetime.utcfromtimestamp(timestamp)

按时间戳返回一个UTC-datetime对象 

datetime.datetime.strptime('2017-03-22 12:21:21',"%Y-%m-%d %H:%M:%S")

将字符串转为datetime对象 

datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d %H%M%S')

将datetime对象转换为str表示形式 

datetime.date.today().timetuple()

转换为时间戳datetime元组对象,可用于转换时间戳 

datetime.datetime.now().timetuple() 


12.7  string模块

String模块是对字符串的一些常用处理,包括字符串的大小写、字符串拼接、字符串查找、字符串替换等等。

代码示例:

mystr=



print(mystr.rpartition(' '))



str =



print (mystr.splitlines())



执行结果:

('xiao dao bian', ' ', 'cheng')

['xiao dao bian cheng']

常用方法列表见下,示例程序可参见字符串处理章节9.5里的示例。

方法

功能描述

str.capitalize()

把字符串的第一个字符大写

str.center(width)

返回一个原字符串居中,并使用空格填充到width长度的新字符串

str.ljust(width)

返回一个原字符串左对齐,用空格填充到指定长度的新字符串

str.rjust(width)

返回一个原字符串右对齐,用空格填充到指定长度的新字符串

str.zfill(width)

返回字符串右对齐,前面用0填充到指定长度的新字符串

str.count(str,[beg,len])

返回子字符串在原字符串出现次数,beg,len是范围

str.decode(encodeing[,replace])

解码string,出错引发ValueError异常

str.encode(encodeing[,replace])

解码string

str.endswith(substr[,beg,end])

字符串是否以substr结束,beg,end是范围

str.startswith(substr[,beg,end])

字符串是否以substr开头,beg,end是范围

str.expandtabs(tabsize=8)

把字符串的tab转为空格,默认为8个

str.find(str,[stat,end])

查找子字符串在字符串第一次出现的位置,否则返回-1

str.index(str,[beg,end])

查找子字符串在指定字符中的位置,不存在报异常

str.isalnum()

检查字符串是否以字母和数字组成,是返回true否则False

str.isalpha()

检查字符串是否以纯字母组成,是返回true,否则false

str.isdecimal()

检查字符串是否以纯十进制数字组成,返回布尔值

str.isdigit()

检查字符串是否以纯数字组成,返回布尔值

str.islower()

检查字符串是否全是小写,返回布尔值

str.isupper()

检查字符串是否全是大写,返回布尔值

str.isnumeric()

检查字符串是否只包含数字字符,返回布尔值

str.isspace()

如果str中只包含空格,则返回true,否则FALSE

str.title()

返回标题化的字符串(所有单词首字母大写,其余小写)

str.istitle()

如果字符串是标题化的(参见title()

str.join(seq)

以str作为连接符,将一个序列中的元素连接成字符串

str.split(str='',num)

以str作为分隔符,将一个字符串分隔成一个序列,num是被分隔的字符串

str.splitlines(num)

以行分隔,返回各行内容作为元素的列表

str.lower()

将大写转为小写

str.upper()

转换字符串的小写为大写

str.swapcase()

翻换字符串的大小写

str.lstrip()

去掉字符左边的空格和回车换行符

str.rstrip()

去掉字符右边的空格和回车换行符

str.strip()

去掉字符两边的空格和回车换行符

str.partition(substr)

从substr出现的第一个位置起,将str分割成一个3元组。

str.replace(str1,str2,num)

查找str1替换成str2,num是替换次数

str.rfind(str[,beg,end])

从右边开始查询子字符串

str.rindex(str,[beg,end])

从右边开始查找子字符串位置

str.rpartition(str)

类似partition函数,不过从右边开始查找

str.translate(str,del='')

按str给出的表转换string的字符,del是要过虑的字符

12.8  总结

通过本章的学习,我们熟悉了python里常用模块的使用,这是为我们编写高质量的代码奠定了良好的基础。接下来我们来聊聊编程风格方面的事情。