模块基础
死亡三问
# 什么是模块
模块就是一个封装程度更高的一个容器
1 使用python编写的.py文件
2 已被编译为共享库或DLL的C或C++扩展
3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
4 使用C编写并链接到python解释器的内置模块
# 为什么要用模块
为了方便管理代码,使程序的结构更清晰,方便管理,提升开发效率
# 模块怎么用
最常见的用法,py的文件名在另外一个py文件中import加那个py的文件名,不要加.py
import ...
指名道姓去要,要加前缀,但是不会冲突,当然你可以选择加一个as,给这个前缀起一个别名
from ...import ...
不用加前缀,但是会与本身的函数可能会冲突
time模块
>>> time.time()
1623228465.962022
'''
这个是世界戳,指的是从1970年也就是unix元年,到现在的秒数
'''
>>> time.strftime('%Y-%m-%d %H:%M:%S')
'2021-06-09 16:49:24'
'''
时间的格式化输出
'''
>>> time.localtime()
time.struct_time(tm_year=2021, tm_mon=6, tm_mday=9, tm_hour=16, tm_min=49, tm_sec=59, tm_wday=2, tm_yday=160, tm_isdst=0)
>>> time.gmtime()
time.struct_time(tm_year=2021, tm_mon=6, tm_mday=9, tm_hour=8, tm_min=50, tm_sec=16, tm_wday=2, tm_yday=160, tm_isdst=0)
'''
localtime : 本地时区的时间
gmtime : UTC时区的时间,世界标准时间
'''
random模块
# 0与1之间生成一个随机的小数
>>> random.random()
0.23934059769074678
# 1和3,之间随机取一个整数,1跟3可以取到
>>> random.randint(1,3)
1
# 1和3之间,随机生成一个整数,顾头不顾尾
>>> random.randrange(1,3)
2
# 在choice括号里面这个列表里面随机取到一个元素
>>> random.choice([1,'qwe',23,[1,2,]])
1
# sample(列表,n) 这个在这个列表里面随机找2个组合
>>> random.sample([1,'qwe',3,[1,2]],2)
['qwe', 1]
# 大于1小于3的一个随机小数
>>> random.uniform(1,3)
2.834386166680978
# 洗牌 -- 打乱顺序
>>> l = [1,2,3,45,6,7]
>>> random.shuffle(l)
>>> print(l)
[3, 7, 2, 45, 6, 1]
案例一:
'''
生成一个随机验证码(字母,数字组成)
'''
# 知识储备
>>> chr(122)
'z'
>>> chr(65)
'A'
>>> ord('a')
97
>>> ord('Z')
90
import random
def mak_code(size):
res = ''
for i in range(size):
num = str(random.randint(0, 9)) # 随机得到一个0-9的整数,0和9可取
s_low = chr(random.randint(65, 90)) # 随机得到一个65-90的整数,转化成字母
s_upper = chr(random.randint(97, 122))
res += random.choice([num, s_low, s_upper])# 得到的三个数随机取一个
return res
os模块
'''
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.environ 获取系统环境变量
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
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.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
'''
>>> import os
>>> os.environ['name'] = 'lyh'
>>> os.environ
environ({'ALLUSERSPROFILE': 'C:\\ProgramData', ...... 'WINDIR': 'C:\\WINDOWS', 'NAME': 'lyh'})
# 变量分为局部变量,全局变量,环境变量。 局部变量,局部有效,全局变量在这个py文件中有效,环境变量,在整个项目中有效。查找优先级,局部-->全局-->环境
subprocess模块
subprocess.Popen('tasklist', shell=True)
print('hello')
time.sleep(3)
'''
这个程序运行启动一个进程,开启一个子进程,然后调用Popen这个方法,传入这个终端命令,父进程打印hello并且睡眠3秒,
子进程拿到运行的结果返回给父进程
'''
obj = subprocess.Popen('tasklist', shell=True,
stdout=subprocess.PIPE, # 子进程的结果丢到管道里面,正确管道
stderr=subprocess.PIPE # 错误管道
)
res1 = obj.stdout.read() # 父进程在这等着子进程的结果,一直等,
print(res1.decode('gbk'))