python内置模块介绍(一)
程序员文章站
2022-06-09 13:46:49
本文主要介绍模块列表如下: os模块 os.path下方法 没有小括号 sys模块 re模块 re模块的函数介绍 正则表达式符号含义 time模块 在time模块中有3中标示时间的方式:1.时间戳,2.格式化的时间字符串,3.元祖(struct_time,有9个元素) UTC(Coordinated ......
本文主要介绍模块列表如下:
- sys
- re
- time
- datetime
- random
- shutil
- subprocess
os模块
- os.getcwd() 获取当前工作目录
- os.chdir("/path/to") 将目录切换到/path/to目录,等价于shell中的cd命令
- os.makedirs('path1/path2') 创建多层目录(可以多层目录同时不存在),相当于shell中的mkdir -p 命令
- os.removedirs("path1/path2") 删除空目录,如果目录不空就会报错,首先删除path2目录,如果path1也变成空目录了,也会删除path1,知道所给目录的第一层(即示例中的path1)停止
- os.mkdir("path") 创建单层目录path,相当于shell中的mkdir,注:path目录所在的上一层目录必须已经存在
- os.rmdir("path") 删除单层目录path,相当于shell中的rmdir
- os.listdir("path") 列出指定目录下的所有文件和子目录,包括隐藏文件,返回值是列表
- os.remove("file") 删除单个文件
- os.rename("a","b") 重命名(文件或目录)
- os.stat("a") 获取a(文件或目录)的所有信息:返回值是一个os.stat_result类
- os.system("shell command") 运行shell命令,直接显示运行结果,返回值是程序执行成功的code,非shell运行结果的返回值,0代表成功,非0失败
os.path下方法
- os.path.abspath(path) 返回path的绝对路径
- os.path.realpath(path) 返回path的绝对路径,和abspath不同的是,如果path是一个连接,返回的是path所连接的绝对路径
- oa.path.split("path") 将path分割成目录和文件名,返回值是二元的元祖
- os.path.dirname("path") 返回path所在的目录
- os.path.basename("path") 返回path文件名
- os.path.exists("a") 如果a存在,返回true;如果a不存在,返回false;a可以是文件也可以是目录
- os.path.isabs("path") 如果path是绝对路径,返回true
- os.path.isfile("path") 如果path是一个存在的文件,返回true。否则返回false
- os.path.isdir("path") 如果path是一个存在的目录,则返回true。否则返回false
- os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
- os.path.getsize("a") 返回a的大小(如果a是文件,就是文件大小;如果a是目录,则是目录内inode列表所占空间,而不是目录内文件所占的空间大小;如果a是符号链接,是指链接文件的路径名的字节数)
- os.path.getatime("a") 返回a所指向的文件或者目录的最后访问时间
- os.path.gettime("a") 返回a所指向的文件或者目录的最后权限修改时间
- os.path.getmtime("a") 返回a所指向的文件或者目录的最后内容修改时间
没有小括号
- os.curdir 返回值是".",即当前目录的相对路径,注意:没有小括号
- os.pardir 返回值是"..", 即上一层目录的相对路径,注意:没有小括号
- os.sep 输出操作系统的路径分隔符,win下为"\\",linux下为"/",没有小括号
- os.linesep 输出当前操作系统的行终止符,win下为"\t\n",linux下为"\n",没有小括号
- os.pathsep 输出当前操作系统用于分割文件路径的字符串,没有小括号
- os.name 输出当前使用平台,win->'nt'; linux->'posix'
- os.environ 获取系统环境变量,返回值是一个类,可以通过返回值的各种方法调用里面的值
sys模块
- sys.argv 命令行list数据,第一个元素是程序本身
- sys.exit(a) 退出程序,如果a是假则正常退出,如果真,则异常退出,并返回a(假可以是0,false,空字符串等;真则不是空的数据)
- sys.version 打印python解释程序的版本
- sys.path 返回模块的搜索路径,它对应的是一个list类型,可以通过list的方法进行修改
- sys.platform 返回操作系统的名称
- sys.stdout.write("a") 标准输出打印a(对应的还有stderr)
re模块
re模块的函数介绍
- re.match(pattern,string) 从头开始匹配
- re.search(pattern,string) 匹配(如果pattern增加了^,就和match功能一样)
- re.findall(pattern,string) 把所有匹配到的字符以 list形式 返回
- re.split(pattern,string) 将string按照pattern分割,返回列表,列表中的元素不包含pattern
- re.sub(pattern,replace,string) 将string中的pattern替换成replace
正则表达式符号含义
- "." 默认匹配除\n之外的任意一个字符,若指定flag dotall,则匹配任意字符,包括换行
- "^" 匹配字符开头,若指定flags multiline,这种(r"^a","\nabc\neee",flags=re.multiline)也可以匹配上(不指定flags,"\nabc\neee"就是一行)
- "$" 匹配字符结尾,若指定flags multiline,这种("foo$","bfoo\nsdfsf",flags=re.multiline)也可以匹配上,同上
- "*" 匹配*号前的字符0次或多次
- "+" 匹配前一个字符1次或多次
- "?" 匹配前一个字符0次或1次
- "{m}" 匹配前一个字符至少m次
- "{m,n}" 匹配前一个字符m到n次(即最少m次,最多n次)
- "|" 匹配|左或|右的字符
- "(...)" 分组匹配,分组的顺序:从左到右,从外到内
- 分组还可以细分,普通分组,命名分组,后向引用,前向肯定断言,后向肯定断言,前向否定断言、后向否定断言
- 普通分组,则是通过1,2.....来获取匹配到信息,如re.search(r"(abc)","abcdefg").group(1)
-
命名分组,则是通过给分组命名来获取匹配到的信息,如
(?p<name>正则表达式),这里的命名就是name,通过groupdict("name")函数获取捕获值
- 其他用的不多
- [...] 匹配中扩内的人一个字符,如果中括号前加^(即[^]),代表匹配非中括号内任一个字符
- "\a" 只从字符开头匹配,re.search("\aabc","alexabc") 是匹配不到的
- "\z" 匹配字符结尾,同$
- "\d" 匹配数字[0-9]
- "\d" 匹配非数字
- "\w" 匹配[a-za-z0-9]
- "\w" 匹配非[a-za-z0-9]
- "\s" 匹配空白字符、\t、\n、\r
- "\s" 匹配\s的补集
- \d和\d,\w和\w,\s和\s每一对都是对方的补集,一起可以组成全部的字符
time模块
- 在time模块中有3中标示时间的方式:1.时间戳,2.格式化的时间字符串,3.元祖(struct_time,有9个元素)
- utc(coordinated universal time,协调世界时),世界标准时间,中国是utc+8;dst(daylight saving time)夏令时
- 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日0:00:00开始按秒计算的量
- 元祖(struct_time)有9个元素,tm_year:年份,tm_mon:月,tm_mday:日期,tm_hour:小时,tm_min:分钟,tm_sec:秒,tm_wday:星期中的第几天(周一用0表示),tm_yday:一年中的第几天,tm_isdst:是否为夏令时
函数介绍
time中各种类型时间的转换,引用:https://blog.51cto.com/egon09/1840425
- time.time() 当前的时间,类型是时间戳(timestamp)
- time.sleep(timestamp) 程序睡眠,单位秒
- time.gmtime([timestamp]) 类型为struct_time;不传递参数,当前utc的时间;如果传递参数,则为从1970年1月1日0:00:00经过timestamp时间后的utc时间
- time.localtime([timestamp]) 类型为struct_time;不传参数,是当前本地的时间;如果传递参数,则为从1970年1月1日0:00:00经过timestamp时间后的本地时间
- time.asctime([struct_time]) 类型为字符串,格式为"'wed jul 17 08:40:40 2019'"”;不传递参数,解析当前时间;传递参数,解析参数时间
- time.ctime([timestamp]) 类型为字符串,格式为"'wed jul 17 08:40:40 2019'"”;不传递参数,解析当前时间;传递参数,解析参数时间(和上面不同给的是传递参数类型不同)
- time.strptime(string,format) 返回struct_time类型,将string按照format解析,format格式下面介绍
- time.strftime(format[,tuple] 返回字符串,将时间按照format形式转换为字符串格式,没有指定tuple time,则默认使用localtime
- %y 两位数的年份表示(00-99)
- %y 四位数的年份表示(000-9999)
- %m 月份(01-12)
- %d 月内中的一天(0-31)
- %h 24小时制小时数(0-23)
- %i 12小时制小时数(01-12)
- %m 分钟数(00-59)
- %s 秒(00-59)
- %a 本地简化星期名称
- %a 本地完整星期名称
- %b 本地简化的月份名称
- %b 本地完整的月份名称
- %c 本地相应的日期表示和时间表示,返回和time.ctime一样
- %j 年内的一天(001-366)
- %p 本地a.m.或p.m.的等价符
- %u 一年中的星期数(00-53)星期天为星期的开始
- %w 星期(0-6),星期天为星期的开始
- %w 一年中的星期数(00-53)星期一为星期的开始
- %x 本地相应的日期表示
- %x 本地相应的时间表示
- %z 当前时区的名称 # 乱码
- %% %号本身
datetime模块
- datetime.dateime.now() 返回当前时间,类型是 datetime.datetime,
- datetime.timedelta() 这个函数不单独使用,要配合now函数,对时间进行加减,比如:datetime.dateime.now() + datetime.timedelta(-3)
- timedelta的参数有:days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0
日期的函数还有calendar(日历)模块,详细见:
random模块
- random.random() 返回浮点型数字,区间为[0.0 1)---不包含1
- random.uniform(a,b) 返回浮点型数字,可自定义区间,[a,b)
- random.int(a,b) 返回整数,区间为[a,b]
- random.randrange(a,b) 返回整数,区间[a,b)区间性质和range函数一样
- random.choice(seq) 返回seq中的一个元素
- random.shuffle(x) 对x重新洗牌,即打乱顺序,x是一个列表
shutil模块shutil
高级的文件,文件夹处理
- shutil.copyfilebj(src,dst) 拷贝文件对象,src和dst必须是文件句柄(即open后的文件句柄)
- shutil.copyfile(src,dst) 拷贝文件,src和dst是文件名称(调用copyfilebj来实现的)
- shutil.copymode(src,dst) 拷贝文件权限,内容、组、用户均不变,src和dst都是文件,且必须存在
- shutil.copystat(src,dst) 拷贝文件的状态信息,包括mode,atime,ctime,flags等
- shutil.copy(src,dst) 拷贝文件和权限,src和dst都是文件
- shutil.copy2(src,dst) 拷贝文件和状态,src和dst都是文件
- shutil.copytree(src,dst) 递归拷贝文件
- shutil.rmtree(path) 递归删除文件
- shutil.move(src,dst) 递归移动文件
subprocess模块
直接运行推荐使用run方法,如果使用更高级的可以直接使用popen接口;如果想得到程序运行结果,推荐使用getstatusoutput(cmd)
-
subprocess.run(args, *, stdin=none, input=none, stdout=none, stderr=none, capture_output=false, shell=false, cwd=none, timeout=none, check=false, encoding=none, errors=none, text=none, env=none, universal_newlines=none)
-
args:标示要执行的命令,必须是一个字符串,字符串参数需要是列表形式,如果shell参数这只为true,那么可以将参数和命令放到一个字符串中,因为它是通过系统的shell执行
- 比如:如果有参数,必须是["ls","-al"],没有参数可以写"ls";如果shell为true,可以写成“ls -a”
- stdin、stdout 和 stderr:子进程的标准输入、输出和错误。其值可以是 subprocess.pipe、subprocess.devnull、一个已经存在的文件描述符、已经打开的文件对象或者 none。subprocess.pipe 表示为子进程创建新的管道。subprocess.devnull 表示使用 os.devnull。默认使用的是 none,表示什么都不做。另外,stderr 可以合并到 stdout 里一起输出。
- timeout:设置命令超时时间。如果命令执行时间超时,子进程将被杀死,并弹出 timeoutexpired 异常。
- check:如果该参数设置为 true,并且进程退出状态码不是 0,则弹 出 calledprocesserror 异常。
- encoding: 如果指定了该参数,则 stdin、stdout 和 stderr 可以接收字符串数据,并以该编码方式编码。否则只接收 bytes 类型的数据。
- shell:如果该参数为 true,将通过操作系统的 shell 执行指定的命令。
-
args:标示要执行的命令,必须是一个字符串,字符串参数需要是列表形式,如果shell参数这只为true,那么可以将参数和命令放到一个字符串中,因为它是通过系统的shell执行
- subprocess.getstatusoutput(cmd) 返回值是一个二元元组,第一个是exitcode(0代表运行成功,其他代表失败),第二个是运行cmd返回的结果
- 类似的还有一个函数subprocess.getoutput(cmd) 只返回运行的结果
剩余部分请参考:
上一篇: 【多进程】php多进程编程
下一篇: Java 处理异常