python常用模块
一.time和datetime
1.time
1 print(time.time()) # 时间戳 2 3 print(time.localtime()) # 结构化时间(东八区) 4 print(time.localtime().tm_year) # 得到年份 5 print(time.gmtime()) # 结构化时间(0区) 6 7 print(time.strftime("%Y-%m-%d %X")) # 格式化时间字符串 8 9 10 # 结果 11 1552100964.4544 12 time.struct_time(tm_year=2019, tm_mon=3, tm_mday=9, tm_hour=11, tm_min=9, tm_sec=24, tm_wday=5, tm_yday=68, tm_isdst=0) 13 2019 14 time.struct_time(tm_year=2019, tm_mon=3, tm_mday=9, tm_hour=3, tm_min=9, tm_sec=24, tm_wday=5, tm_yday=68, tm_isdst=0) 15 2019-03-09 11:09:24
三种形式转化
1 # ----------按图1转换时间 2 # localtime([secs]) 3 # 将一个时间戳转换为当前时区的struct_time(结构化时间)。secs参数未提供,则以当前时间为准。 4 # print(time.localtime(147352544)) 5 # gmtime([secs]) 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。 6 7 8 # mktime(t) : 将一个struct_time转化为时间戳。 9 print(time.mktime(time.localtime())) # 1552101514.0 10 11 """ 12 strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和 13 time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个 14 元素越界,ValueError的错误将会被抛出。 15 """ 16 print(time.strftime("%Y-%m-%d %X", time.localtime())) # 2019-03-09 11:20:10 17 18 19 # time.strptime(string[, format]) 20 # 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。 21 print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X')) 22 23 # time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6, tm_wday=3, tm_yday=125, tm_isdst=-1) 24 # 在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。
1 # asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。 2 # 如果没有参数,将会将time.localtime()作为参数传入。 3 print(time.asctime()) # Sat Mar 9 11:24:16 2019 4 5 # ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为 6 # None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。 7 print(time.ctime()) # Sat Mar 9 11:24:16 2019
time.sleep(secs) # 休眠一段时间
2.datetime
主要是4个类
1. datetime.date: 是指年月日构成的日期(相当于日历) 2. datetime.time: 是指时分秒微秒构成的一天24小时中的具体时间(相当于手表) 3. datetime.datetime: 上面两个合在一起,既包含时间又包含日期 4. datetime.timedelta: 时间间隔对象(timedelta)。一个时间点(datetime)加上一个时间间隔(timedelta)可以得到一个新的时间点(datetime)。比如今天的上午3点加上5个小时得到今天的上午8点。同理,两个时间点相减会得到一个时间间隔。
datetime.date
1.新建一个date对象,日期为今天,既可以直接调用datetime.date.today(),也可以直接向datetime.date()传值,如下: In [4]: today = datetime.date.today() In [5]: today Out[5]: datetime.date(2014, 8, 15) In [6]: t = datetime.date(2014,8,15) In [7]: t Out[7]: datetime.date(2014, 8, 15) 2.datetime.date.strftime(format) 格式化为需要的时间,如常用的 “年-月-日 小时:分钟:秒” 格式 In [8]: today.strftime('%Y-%m-%d %H:%M:%S') Out[8]: '2014-08-15 00:00:00’ date对象中小时、分钟、秒默认都是0,纪元年的那个时间 3.datetime.date.timple() 转成struct_time格式,这样传递给time.mktime(t) 后,直接转成时间戳格式 In [9]: today.timetuple() Out[9]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=227, tm_isdst=-1) In [10]: time.mktime(today.timetuple()) Out[10]: 1408032000.0 4.datetime.date.replace(year, month, day) 返回一个替换后的date对象 In [11]: today.replace(year=2013) Out[11]: datetime.date(2013, 8, 15) 5.datetime.date.fromtimestamp(timestamp) 将时间戳转化为date对象 In [12]: datetime.date.fromtimestamp(1408058729) Out[12]: datetime.date(2014, 8, 15)
datetime.time 类
1.新建一个time对象 In [15]: t Out[15]: datetime.time(8, 45, 20) 2.datetime.time.(format)格式化输出 In [16]: t.strftime('%Y-%m-%d %H:%M:%S') Out[16]: '1900-01-01 08:45:20’ time对应的年、月、日为1900、01、01,纪元年的那个时间 3.datetime.time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]) 返回一个替换后的time对象 In [17]: t.replace(hour=9) Out[17]: datetime.time(9, 45, 20)
datetime.datetime类
其实和date的那些方法差不多了,大概看以下,简单说说 1.新建一个datetime对象,日期为今天,既可以直接调用datetime.datetime.today(),也可以直接向datetime.datetime()传值,如下: In [21]: d1 = datetime.datetime.today() In [22]: d1 Out[22]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945) In [23]: d2 = datetime.datetime(2014, 8, 15, 8, 12, 34, 790945) In [24]: d2 Out[24]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945) 2.datetime.datetime.now([tz]) 当不指定时区时,和datetime.datetime.today()是一样的结果,如下 In [25]: datetime.datetime.now() Out[25]: datetime.datetime(2014, 8, 15, 8, 14, 50, 738672) 3..datetime.datetime.strftime(format) 格式化为需要的时间,如常用的 “年-月-日 小时:分钟:秒” 格式 In [27]: d1 Out[27]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945) In [28]: d1.strftime('%Y-%m-%d %H:%M:%S') Out[28]: '2014-08-15 08:12:34’ 4.datetime.datetime.timple() 转成struct_time格式,这样传递给time.mktime(t) 后,直接转成时间戳格式 In [29]: d1 Out[29]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945) In [30]: d1.timetuple() Out[30]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=15, tm_hour=8, tm_min=12, tm_sec=34, tm_wday=4, tm_yday=227, tm_isdst=-1) In [31]: time.mktime(d1.timetuple()) Out[31]: 1408061554.0 5.datetime.datetime.replace(year, month, day) 返回一个替换后的date对象 In [32]: d1 Out[32]: datetime.datetime(2014, 8, 15, 8, 12, 34, 790945) In [33]: d1.replace(year=2000) Out[33]: datetime.datetime(2000, 8, 15, 8, 12, 34, 790945) 6.datetime.datetime.fromtimestamp(timestamp) 将时间戳转化为datetime对象 In [34]: time.time() Out[34]: 1408061894.081552 In [35]: datetime.datetime.fromtimestamp(1408061894) Out[35]: datetime.datetime(2014, 8, 15, 8, 18, 14)
datetime.timedelta类
没啥好说的,主要做时间的加减法用,如下: In [78]: today = datetime.datetime.today() In [79]: yesterday = today - datetime.timedelta(days=1) In [80]: yesterday Out[80]: datetime.datetime(2014, 8, 14, 15, 8, 25, 783471) In [81]: today Out[81]: datetime.datetime(2014, 8, 15, 15, 8, 25, 783471)
二.random
1 import random 2 3 print(random.random())#(0,1)----float 大于0且小于1之间的小数 4 5 print(random.randint(1,3)) #[1,3] 大于等于1且小于等于3之间的整数 6 7 print(random.randrange(1,3)) #[1,3) 大于等于1且小于3之间的整数 8 9 print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5] 10 11 print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合 12 13 print(random.uniform(1,3))#大于1小于3的小数,如1.927109612082716 14 15 16 item=[1,3,5,7,9] 17 random.shuffle(item) #打乱item的顺序,相当于"洗牌" 18 print(item)
随机字符串
1 import random 2 def make_code(n): 3 res='' 4 for i in range(n): 5 s1=chr(random.randint(65,90)) 6 s2=str(random.randint(0,9)) 7 res+=random.choice([s1,s2]) 8 return res 9 10 print(make_code(9))
三.os
os模块是与操作系统交互的一个接口
1 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 2 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd 3 os.curdir 返回当前目录: ('.') 4 os.pardir 获取当前目录的父目录字符串名:('..') 5 os.makedirs('dirname1/dirname2') 可生成多层递归目录 6 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 7 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname 8 os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname 9 os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 10 os.remove() 删除一个文件 11 os.rename("oldname","newname") 重命名文件/目录 12 os.stat('path/filename') 获取文件/目录信息 13 os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" 14 os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" 15 os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: 16 os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' 17 os.system("bash command") 运行shell命令,直接显示 18 os.environ 获取系统环境变量 19 os.path.abspath(path) 返回path规范化的绝对路径 20 os.path.split(path) 将path分割成目录和文件名二元组返回 21 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 22 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 23 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False 24 os.path.isabs(path) 如果path是绝对路径,返回True 25 os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False 26 os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False 27 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 28 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 29 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 30 os.path.getsize(path) 返回path的大小
四.sys
1 sys.argv 命令行参数List,第一个元素是程序本身路径 2 sys.exit(n) 退出程序,正常退出时exit(0) 3 sys.version 获取Python解释程序的版本信息 4 sys.maxint 最大的Int值 5 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 6 sys.platform 返回操作系统平台名称 7 sys.stdout 8. sys.stdout.write 写入 9. sys.stdout.flush 刷新到屏幕上
1 #=========知识储备========== 2 #进度条的效果 3 [# ] 4 [## ] 5 [### ] 6 [#### ] 7 8 #指定宽度 9 print('[%-15s]' %'#') 10 print('[%-15s]' %'##') 11 print('[%-15s]' %'###') 12 print('[%-15s]' %'####') 13 14 #打印% 15 print('%s%%' %(100)) #第二个%号代表取消第一个%的特殊意义 16 17 #可传参来控制宽度 18 print('[%%-%ds]' %50) #[%-50s] 19 print(('[%%-%ds]' %50) %'#') 20 print(('[%%-%ds]' %50) %'##') 21 print(('[%%-%ds]' %50) %'###') 22 23 24 #=========实现打印进度条函数========== 25 import sys 26 import time 27 28 def progress(percent,width=50): 29 if percent >= 1: 30 percent=1 31 show_str=('[%%-%ds]' %width) %(int(width*percent)*'#') 32 print('\r%s %d%%' %(show_str,int(100*percent)),file=sys.stdout,flush=True,end='') 33 34 35 #=========应用========== 36 data_size=1025 37 recv_size=0 38 while recv_size < data_size: 39 time.sleep(0.1) #模拟数据的传输延迟 40 recv_size+=1024 #每次收1024 41 42 percent=recv_size/data_size #接收的比例 43 progress(percent,width=70) #进度条的宽度70 44 45 打印进度条
五.序列化
六.re模块