标准库
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里常用模块的使用,这是为我们编写高质量的代码奠定了良好的基础。接下来我们来聊聊编程风格方面的事情。