Python--常用模块
程序员文章站
2022-08-31 23:45:13
random 模块 随机:在某个范围内取到每一个值的概率是相同的 练习:生成随机验证码 # (1)4位数字的验证码 # 基础版本 lis = '' for i in range(4): num = random.randint(0, 9) lis += str(num) print(lis) # 函 ......
random 模块
随机:在某个范围内取到每一个值的概率是相同的
import random # 随机小数 print(random.random()) # 0-1之内的随机小数 print(random.uniform(1, 5)) # 任意范围之内的随机小数 # 随机整数 print(random.randint(1, 2)) # [1,2] 包含2在内的范围内随机取整数 print(random.randrange(1, 2)) # [1,2) 不包含2在内的范围内随机取整数 print(random.randrange(1, 10, 2)) # [1,10) 不包含10在内的范围内随机取奇数 # 随机抽取 lst = [1, 2, 3, 'abc', ('wahaha', 'qqxing')] ret = random.choice(lst) # 随机抽取一个值 print(ret) ret1 = random.sample(lst, 2) # 随机抽取两个值 print(ret1) # 打乱顺序 在原列表的基础上做乱序 lst = [1, 2, 3, 'abc', ('wahaha', 'qqxing')] random.shuffle(lst) print(lst)
练习:生成随机验证码
# (1)4位数字的验证码 # 基础版本 lis = '' for i in range(4): num = random.randint(0, 9) lis += str(num) print(lis) # 函数版本 def rand_code(n=4): lis = '' for i in range(n): num = random.randint(0, 9) lis += str(num) return lis print(rand_code(6)) # (2)6位 数字+字母 def rand_code(n): code = '' for i in range(n): rand_num = str(random.randint(0, 9)) rand_alph = chr(random.randint(97, 122)) rand_alph_upper = chr(random.randint(65, 90)) rand_num = random.choice([rand_num, rand_alph, rand_alph_upper]) code += rand_num return code ret = rand_code(4) print(ret) # (3)可控制验证码 数字 / 数字+字母 def rand_code(num, defaultalph=true): # 当defaultalph=true时生成字母+数字的验证码, 为false时生成纯数字验证码 code = '' for i in range(num): rand_num = str(random.randint(0, 9)) if defaultalph: rand_alph = chr(random.randint(97, 122)) rand_alph_upper = chr(random.randint(65, 90)) rand_num = random.choice([rand_num, rand_alph, rand_alph_upper]) code += rand_num return code ret = rand_code(4, defaultalph=false) print(ret)
time 模块
#常用方法 1.time.sleep(secs) (线程)推迟指定的时间运行。单位为秒。 2.time.time() 获取当前时间戳
表示时间的三种方式
在python中,通常用这三种方式表示时间:时间戳、格式化的时间字符串、元组(struct_time)。
- 时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
- 格式化的时间字符串(format string): ‘1999-12-06’
%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 当前时区的名称 %% %号本身
- 元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
索引(index) 属性(attribute) 值(values) 0 tm_year(年) 比如2018 1 tm_mon(月) 1-12 2 tm_mday(日) 1-31 3 tm_hour(时) 0-23 4 tm_min(分) 0-59 5 tm_sec(秒) 0-60 6 tm_wday(weekday) 0-6(0表示周一) 7 tm_yday(一年中的第几天) 1-366 8 tm_isdst(是否是夏令时) 默认为0
认识python中表示时间的几种格式:
# 时间模块 import time # 时间戳 print(time.time()) # 返回当前时间的时间戳 # 结果>>> 1543743462.3950245 # 时间字符串 print(time.strftime('%y-%m-%d %x')) # 结果>>> 2018-12-02 17:39:58 print(time.strftime('%y-%m-%d %h-%m-%s')) # 结果>>> 2018-12-02 17-39-58 # 时间元组:localtime将一个时间戳转换为当前时区的struct_time print(time.localtime()) # 结果>>> time.struct_time(tm_year=2018, tm_mon=12, tm_mday=2, tm_hour=17, tm_min=43, tm_sec=44, tm_wday=6, tm_yday=336, tm_isdst=0)
小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的。
time模块相关方法:
time.localtime([secs]):将一个时间戳转换为当前时区的struct_time;secs参数未提供,则以当前时间为准。 time.gmtime([secs]):和 localtime()类似;gmtime()方法是将一个时间戳转换为utc时区(0 时区)的struct_time。 time.time():返回当前时间戳 time.mktime(t):将一个time.struct_time转为时间戳 time.sleep(secs):线程推迟指定的时间运行,单位为秒 time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:'sun dec 2 17:52:36 2018'。如果没有参数,默认将time.localtime()作为参数传入 time.ctime([t]):把一个时间戳(按秒计算的浮点数)转为time.asctime()的形式。如果参数未给或者为none的时候,默认将time.time()作为参数,相当于time.asctime(time.localtime(secs)) time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转为格式化的时间字符串,如果t未指定,默认传入time.localtime() time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作
几种格式之间的转化
# 时间戳——>结构化时间 # time.gmtime(时间戳) #utc时间,与英国伦敦当地时间一致 # time.localtime(时间戳) #当地时间。例如我们现在在北京执行这个方法:与utc时间相差8小时,utc时间+8小时 = 北京时间 print(time.gmtime(1510000000)) #结果>>> time.struct_time(tm_year=2017, tm_mon=11, tm_mday=6, tm_hour=20, tm_min=26, tm_sec=40, tm_wday=0, tm_yday=310, tm_isdst=0) print(time.localtime()) #结果>>> time.struct_time(tm_year=2018, tm_mon=12, tm_mday=2, tm_hour=18, tm_min=4, tm_sec=23, tm_wday=6, tm_yday=336, tm_isdst=0) # 结构化时间——>时间戳 # time.mktime(结构化时间) time_tuple = time.localtime(1510000000) print(time.mktime(time_tuple)) #结果>>> 1510000000.0
# 结构化时间——>字符串时间 # time.strftime("格式定义","结构化时间") 结构化时间参数若不传,则显示当前时间 print(time.strftime("%y-%m-%d %x")) #结果>>> 2018-12-02 18:07:47 print(time.strftime("%y-%m-%d", time.localtime(1510000000))) #结果>>> 2017-11-07 # 字符串时间——>结构化时间 # time.strptime(时间字符串,字符串对应格式) print(time.strptime("2018-02-22", "%y-%m-%d")) #结果>>> time.struct_time(tm_year=2018, tm_mon=2, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=53, tm_isdst=-1) print(time.strptime("2018/03/01", "%y/%m/%d")) #结果>>> time.struct_time(tm_year=2018, tm_mon=3, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=60, tm_isdst=-1)
# 结构化时间 ——> %a %b %d %h:%m:%s %y串 # time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串 print(time.asctime(time.localtime(1510000000))) #结果>>> tue nov 7 04:26:40 2017 print(time.asctime()) #结果>>> sun dec 2 18:12:19 2018 # 时间戳 ——> %a %b %d %h:%m:%s %y串 # time.ctime(时间戳) 如果不传参数,直接返回当前时间的格式化串 print(time.ctime()) #结果>>> sun dec 2 18:13:14 2018 print(time.ctime(1510000000)) #结果>>> tue nov 7 04:26:40 2017
# 结构化时间 struct_time = time.localtime() struct_time = time.strptime('%s-%s-1'%(struct_time.tm_year,struct_time.tm_mon),'%y-%m-%d') print(time.mktime(struct_time)) # 格式化时间 ret = time.strftime('%y-%m-1') struct_time = time.strptime(ret,'%y-%m-%d') print(time.mktime(struct_time))
datetime 模块
相比于time模块,datetime模块的接口则更直观,更容易调用
- datetime模块定义了下面这几个类:
- datetime.date:表示日期的类;常用的属性有year, month, day;
- datetime.time:表示时间的类;常用的属性有hour, minute, second, microsecond;
- datetime.datetime:表示日期时间。
- datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
- datetime.tzinfo:与时区有关的相关信息。
import datetime print(datetime.datetime.now()) # 现在的时间 # 只能调整的字段:weeks days hours minutes seconds print(datetime.datetime.now() + datetime.timedelta(weeks=3)) # 三周后 print(datetime.datetime.now() + datetime.timedelta(weeks=-3)) # 三周前 print(datetime.datetime.now() + datetime.timedelta(days=-3)) # 三天前 print(datetime.datetime.now() + datetime.timedelta(days=3)) # 三天后 print(datetime.datetime.now() + datetime.timedelta(hours=5)) # 5小时后 print(datetime.datetime.now() + datetime.timedelta(hours=-5)) # 5小时前 print(datetime.datetime.now() + datetime.timedelta(minutes=-15)) # 15分钟前 print(datetime.datetime.now() + datetime.timedelta(minutes=15)) # 15分钟后 print(datetime.datetime.now() + datetime.timedelta(seconds=-70)) # 70秒前 print(datetime.datetime.now() + datetime.timedelta(seconds=70)) # 70秒后 current_time = datetime.datetime.now() # 可直接调整到指定的 年 月 日 时 分 秒 等 print(current_time.replace(year=1977)) # 直接调整到1977年 print(current_time.replace(month=1)) # 直接调整到1月份 print(current_time.replace(year=1989,month=4,day=25)) # 1989-04-25 18:49:05.898601 # 将时间戳转化成时间 print(datetime.date.fromtimestamp(1232132131)) # 2009-01-17
sys 模块
sys模块是与python解释器交互的一个接口
sys.argv 命令行参数list,第一个元素是程序本身路径,(类似shell中调用脚本后面传入的$1,$2,$3) sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1) sys.version 获取python解释程序的版本信息 sys.path 返回模块的搜索路径,初始化时使用pythonpath环境变量的值 sys.platform 返回操作系统平台名称
name = sys.argv[1] pwd = sys.argv[2] if name == 'xiaobai' and pwd == 'a123456': print('执行以下代码') else: exit()
os 模块
os 模块是与操作系统交互的一个接口
#当前执行这个python文件的工作目录相关的工作路径 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.popen("bash command).read() 运行shell命令,获取执行结果 os.environ 获取系统环境变量 #path系列,和路径相关 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的大小
注意:os.stat('path/filename') 获取文件/目录信息 的结构说明
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)是创建时间(详细信息参见平台的文档)。
练习
import os, sys size = 0 def countdirsize(path): global size pathdirlist = os.listdir(path) for filename in pathdirlist: newabspath = os.path.join(path, filename) if os.path.isdir(newabspath): size += os.path.getsize(newabspath) countdirsize(newabspath) else: size += os.path.getsize(newabspath) def win(): path = input('请输入需要统计的目录>>> ') if os.path.exists(path): countdirsize(path) else: print("请输入正确的路径...") exit() return size def linux(): path = sys.argv[1] if os.path.exists(path): countdirsize(path) else: print("请输入正确的路径...") exit() return size if __name__ == '__main__': if os.name == "nt": print(win()) elif os.name == "posix": print(linux())
上一篇: 董卓入京放着好好的皇帝不做 为什么偏偏做一个相国呢
下一篇: 令人开怀的小笑话。