模块基础

模块基础

死亡三问

# 什么是模块
    模块就是一个封装程度更高的一个容器
                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'))
上一篇:583.两个字符串的删除操作


下一篇:Android模块化面向接口编程,算法太TM重要了