python之常用模块一

摘要:时间模块time 、随机模块random 、os模块、sys模块


一、时间模块
三种格式
    时间戳时间:浮点数 单位为秒
        时间戳起始时间:
            1970.1.1 0:0:0 英国伦敦时间
            1970.1.1 8:0:0 我国(东8区)
    结构化时间:元组(struct_time)
    格式化时间:str数据类型的

import time

1、常用方法:time.sleep(secs)   推迟指定的时间运行,单位是秒

for i in range(3):
    time.sleep(1)
    print(i)


2、表示时间的三种方式:时间戳、元组(struct_time)、格式化的时间字符串
(1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。
我们运行“type(time.time())”,返回的是float类型。
print(time.time())  # 1536050072.5732844(1970年1月1日00:00:00到此刻运行time.time()的时间) 


(2)结构化时间(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一周中第几天,一年中第几天,夏令时)
struct_time = time.localtime()
print(struct_time) # time.struct_time(tm_year=2018, tm_mon=9, tm_mday=4, tm_hour=16, tm_min=40, tm_sec=1, tm_wday=1, tm_yday=247, tm_isdst=0)


(3)格式化时间(Format_string):
fmt1 =time.strftime('%H:%M:%S')  # 时分秒(全大写)
fmt2 =time.strftime('%Y-%m-%d')   # 年月日(年可大写可小写,月日小写)
fmt3 =time.strftime('%y-%m-%d')   # 年月日
fmt4 =time.strftime('%c')   # 本地相应的日期表示和时间表示

print(fmt1)  # 16:49:03
print(fmt2)  # 2018-09-04
print(fmt3)  # 18-09-04
print(fmt4)  # Tue Sep  4 16:49:03 2018

python中时间日期格式化符号:
    %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 本地相应的日期表示和时间表示
    %j 年内的一天(001-366%p 本地A.M.或P.M.的等价符
    %U 一年中的星期数(00-53)星期天为星期的开始
    %w 星期(0-6),星期天为星期的开始
    %W 一年中的星期数(00-53)星期一为星期的开始
    %x 本地相应的日期表示
    %X 本地相应的时间表示
    %Z 当前时区的名称
    %% %号本身



3、几种时间格式间的转换
Timestamp
---> struct_time: localtime、gmtime struct_time ---> Timestamp: mktime Format_string ---> struct_time: strptime struct_time ---> Format_string: strftime 例题: 1,把格式化时间2018年8月8日转成时间戳时间 str_time = '2018-8-8' struct_time = time.strptime(str_time,'%Y-%m-%d') print(struct_time) # time.struct_time(tm_year=2018, tm_mon=8, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=220, tm_isdst=-1) timestamp = time.mktime(struct_time) print(timestamp) # 1533657600.0 2,把时间戳时间转成格式化时间 timestamp = 1500000000 struct_time = time.localtime(timestamp) str_time = time.strftime('%Y-%m-%d',struct_time) print(str_time) # 2017-07-14 3,写函数,计算本月1号的时间戳时间 通过我拿到的这个时间,能迅速的知道我现在所在时间的年 月 def get_timestamp(): str_time = time.strftime('%Y-%m-1') struct_time = time.strptime(str_time,'%Y-%m-%d') timestamp = time.mktime(struct_time) return timestamp ret = get_timestamp() print(ret) 二、随机模块 import random 1、取随机小数 * print(random.random()) # 大于0且小于1之间的小数(0,1) print(random.uniform(1,3)) # 大于n且小于m之间的小数(n,m) 2、取随机整数 **** print(random.randint(1,4)) # 1到4之间的整数,包括1和4, [1,4] print(random.randrange(1,4)) # 1到4之间的整数,包括1,但是不包括4, [1,4) print(random.randrange(1,100,2)) # 1到100之间的奇数 3、随机选择一个返回(字典和集合不可以) **** 3-1列表: lst = [1,2,3,4,5,('a','b'),'cc','dd'] ret = random.choice(lst) print(ret) 3-2元组: tu = (1,2,3,('a','b'),[4,5],{'name':'SB'}) ret = random.choice(tu) print(ret) 3-3range: ret = random.choice(range(100)) print(ret) 4、随机选择多个元素组成一个列表并返回 4-1列表: lst = [1,2,3,4,5,('a','b'),'cc','dd'] ret = random.sample(lst,3) print(ret) 4-2元组: tu = (1,2,3,('a','b'),[4,5],{'name':'SB'}) ret = random.sample(tu,3) print(ret) 4-3range: ret = random.sample(range(100),3) print(ret) 5、乱序(在原来的基础上乱序) *** lst = [1,2,3,4,5,('a','b'),'cc','dd'] random.shuffle(lst) print(lst) 6、验证码 6-1、要随机生成n位数字验证码 def get_code(n=6): code = '' for i in range(n): num = random.randint(0,9) code += str(num) return code ret1 = get_code() ret2 = get_code(4) print(ret1,ret2) 6-2请你生成一个6位验证码(数字和字母) 字母的生成可以使用内置方法chr : 生成一个随机字母 65-90 A-Z: num = random.randint(65,90) print(chr(num)) 97-122 a-z: num = random.randint(97,122) print(chr(num)) def get_code(n=6): code = '' for i in range(n): num = random.randint(0,9) alpha_upper = chr(random.randint(65,90)) alpha_lower = chr(random.randint(97,122)) c = random.choice([num,alpha_upper,alpha_lower]) code += str(c) return code ret = get_code() print(ret) 6-3、可以选择生成纯数字或者数字和字母混合的验证码 def get_code(n=6,alph_flag=True): code = '' for i in range(n): c = random.randint(0,9) if alph_flag: alpha_upper = chr(random.randint(65,90)) alpha_lower = chr(random.randint(97,122)) c = random.choice([c,alpha_lower,alpha_upper]) code += str(c) return code ret = get_code() # ret = get_code(6,False) print(ret) 三、os模块:os模块是与操作系统交互的一个接口 第一部分:目录相关 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.mkdir('dirname') os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.makedirs('dirname1/dirname2') os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.rmdir('dirname') os.removedirs('dirname1/dirname2') 从右往左删,若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.removedirs('dirname1/dirname2') os.listdir('dirname') 列出指定目录下的所有文件和子目录(只找当前的目录和文件,子目录还有其他文件也不会显示),包括隐藏文件,并以列表方式打印 ret = os.listdir('E:\PythonProject') print(ret) # ['test.py', 'project', venv'] # 即使目录project下还有很多文件,也不会显示,只会显示project文件夹 第二部分:文件相关 os.remove() 删除一个文件 os.remove('a.txt') os.rename("oldname","newname") 重命名文件/目录 os.remove('a.txt','b.txt') os.stat('path/filename') 获取文件/目录信息 print(os.stat('E:\PythonProject\\t3.py')) 结果: os.stat_result(st_mode=33206, st_ino=16044073672519102, st_dev=3784701186, st_nlink=1, st_uid=0, st_gid=0, st_size=5199, st_atime=1536062346, st_mtime=1536062346, st_ctime=1536049667) stat 结构说明: st_mode: inode 保护模式 st_ino: inode 节点号。 st_dev: inode 驻留的设备。 st_nlink: inode 的链接数。 st_uid: 所有者的用户ID。 st_gid: 所有者的组ID。 st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。 st_atime: 上次访问的时间。 st_mtime: 最后一次修改的时间。 st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间, 在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。 第三部分:路径相关 os.path.abspath(path) 返回path规范化的绝对路径 ***** ret1 = os.path.abspath('E:/PythonProject') print(ret1) # E:\PythonProject os.path.split(path) 将path分割成目录和文件名二元组返回 ret = os.path.split('E:\PythonProject\project') print(ret) # ('E:\\PythonProject', 'project') os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 ret1 = os.path.dirname('E:\PythonProject\project') print(ret1) # E:\PythonProject os.path.basename(path) 返回path最后的文件名。如果path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 ret2 = os.path.basename('E:\PythonProject\project') print(ret2) # project os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False res1 = os.path.exists('E:\PythonProject\project') print(res1) # True res2 = os.path.exists('E:\project\PythonProject') print(res2) # False os.path.isabs(path) 如果path是绝对路径,返回True ret = os.path.isabs('E:\PythonProject\project') print(ret) # True os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False ret = os.path.isfile('E:\PythonProject\project\python.py') print(ret) # True os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False ret = os.path.isdir('E:\PythonProject\project') print(ret) # True os.path.join(path1,path2...) 将多个路径组合后返回 ret = os.path.join('E:/PythonProject/project','t1.py') print(ret) # E:/PythonProject/project\t1.py ret = os.path.abspath(ret) print(ret) # E:\PythonProject\project\t1.py os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 ** ret = os.path.getatime('E:\PythonProject\project\\t1.py') print(ret) # 1536049139.981451 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 ** ret = os.path.getmtime('E:\PythonProject\project\\t1.py') print(ret) # 1536049139.984452 os.path.getsize(path) 返回path的大小 size = os.path.getsize('E:\PythonProject\project') print(size) # 8192 size = os.path.getsize('E:\PythonProject\project\\t1.py') print(size) # 4156 第四部分:操作系统命令 os.system('dir') # 以字符串的形式来执行操作系统的命令(跟exec类似 - 以字符串的形式来执行python代码) ret = os.popen('dir') # 以字符串的形式来执行操作系统的命令(跟eval类似 - 以字符串的形式来执行python代码 且返回结果) print(ret.read()) os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 print('-->cwd : ',os.getcwd()) open('file','w').close() # 文件在执行这个文件的目录下创建 # 不是当前被执行的文件所在的目录,而是在执行这个文件所在的目录下创建 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.chdir("E:\PythonProject\") 四、sys模块 一个模块能否被导入,就看这个模块所在的目录在不在sys.path路径中 内置模块和第三方扩展模块都不需要我们处理sys.path就可以直接使用 自定义的模块的导入工作需要自己手动的修改sys.path 1、sys.argv:打印出执行这个py文件的绝对路径(列表形式显示) print(sys.argv) 2、sys.path:我们导入的模块是存在硬盘中的,导入的时候会根据sys.path路径来找内置模块之类的。 print(sys.path) 3、sys.modules 查看当前内存空间中所有的模块,和这个模块的内存空间(主要在反射的时候用) sys.modules[__name__] sys.modules['__main__'] # 都表示当前空间的地址

猜你喜欢

转载自www.cnblogs.com/Zzbj/p/9588497.html