Python之路——内置模块总结
time模块
在Python中,通常有这三种方式来表示时间:时间戳、元组(struct_time)、格式化的时间字符串:
(1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
(2)格式化的时间字符串(Format String): ‘1999-12-06’
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)元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等
索引(Index) | 属性(Attribute) | 值(Values) |
---|---|---|
0 | tm_year(年) | 比如2011 |
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 |
1 import time 2 # print(time.time()) 3 # print(time.strftime("%Y-%m-%d %H:%M:%S")) 4 # print(time.strftime("%Y/%m/%d %H:%M:%S")) 5 # t1 = 1500000000 6 # t2 = 1600000000 7 # st1 = time.localtime(t1) 8 # st2 = time.localtime(t2) 9 # st3 = time.localtime(t2-t1) 10 # t4 = time.strftime('%Y-%m-%d %H:%M:%S',(st3[0]-1970,*st3[1:])) 11 # print(st3.tm_yday,st3.tm_hour,st3.tm_min,st3.tm_sec) 12 13 # def past_time(start_time = None): 14 # start_time = start_time if start_time else time.time() 15 # n = 0 16 # while n<100: 17 # time.sleep(0.5) 18 # end_time = time.time() 19 # st = time.gmtime(end_time-start_time) 20 # print('year:%s day:%s %s:%s:%s'% (st.tm_year-1970,st.tm_yday-1,st.tm_hour,st.tm_min,st.tm_sec)) 21 # n += 1 22 # past_time() 23 24 # 时间戳和结构化时间 25 # t = time.time() 26 # print(t) 27 # print(time.localtime(t)) 28 # print(time.gmtime(t)) 29 # print(time.mktime(time.localtime(t))) 30 # print(time.mktime(time.gmtime(8*3600))) 31 32 # asctime([tuple]) -> string 33 # print(time.asctime()) 34 # Convert a time tuple to a string, e.g. 'Sat Jun 06 16:26:11 1998'. 35 # When the time tuple is not present, current time as returned by localtime() 36 # is used. 37 38 # strptime(string, format) -> struct_time 39 # Parse a string to a time tuple according to a format specification. 40 # print(time.strptime('2000-12.31','%Y-%m.%d')) 41 # # time.struct_time(tm_year=2000, tm_mon=12, tm_mday=31, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=366, tm_isdst=-1) 42 43 # print(time.strftime('%m/%d/%Y %H:%M:%S',time.localtime(3000000000))) # 01/24/2065 13:20:00
collections模块
在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。
1.namedtuple: 生成可以使用名字来访问元素内容的tuple
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
3.Counter: 计数器,主要用来计数
4.OrderedDict: 有序字典
5.defaultdict: 带有默认值的字典
1 # from collections import namedtuple 2 # Point = namedtuple('point',['x','y','z']) 3 # p1 = Point(1,2,3) 4 # print(p1) 5 # print(p1.x,p1.y,p1.z) 6 # p2 = Point(2,3,4) 7 # print(p2.x,p2.y,p2.z) 8 9 # Card = namedtuple('card',['suits','number']) 10 # print(Card.__doc__) 11 # c1 = Card('红桃',3) 12 # print(c1.suits,c1.number) 13 14 # >>> from collections import namedtuple 15 # >>> Point = namedtuple('Point',['x','y']) 16 # >>> Point.__doc__ 17 # 'Point(x, y)' 18 # >>> p = Point(11,y=22) 19 # >>> p[0] + p[1] 20 # 33 21 # >>> p.x+p.y 22 # 33 23 # >>> a,b = p 24 # >>> a,b 25 # (11, 22) 26 # >>> a 27 # 11 28 # >>> b 29 # 22 30 # >>> d = p._asdict() 31 # >>> print(d) 32 # OrderedDict([('x', 11), ('y', 22)]) 33 # >>> print(d['x']) 34 # 11 35 # >>> Point(**d) 36 # Point(x=11, y=22) 37 # >>> p._replace(x=100) 38 # Point(x=100, y=22) 39 40 # 队列 41 # import queue 42 # q = queue.Queue() 43 # # Create a queue object with a given maximum size. 44 # # If maxsize is <= 0, the queue size is infinite. 45 # q.put([1,2,3]) 46 # q.put(5) 47 # q.put(6) 48 # print(q) 49 # print(q.qsize()) 50 # print(q.get()) 51 # print(q.get()) 52 # print(q.get()) 53 # print(q.qsize()) 54 55 # from collections import deque 56 # dq = deque('adgas465a') 57 # print(dq) 58 # # print(dq.pop()) 59 # # print(dq.pop()) 60 # dq.append('a') 61 # dq.append('b') 62 # dq.appendleft('c') 63 # print(dq) 64 # print(dq.pop()) 65 # print(dq.popleft()) 66 67 # 有序字典 68 # from collections import OrderedDict 69 # od = OrderedDict([('a',1),('b',2),('c',3)]) 70 # print(od) 71 # print(od['a']) 72 # print(od['b']) 73 # for k in od: 74 # print(k,od[k]) 75 76 # ??????? 77 # from collections import defaultdict 78 # d = defaultdict(lambda : 5) 79 # print(d) 80 81 # from collections import Counter 82 # Counter(): Create a new, empty Counter object. And if given, count elements 83 # from an input iterable. Or, initialize the count from another mapping 84 # of elements to their counts. 85 # c = Counter('sdfjkasjdflajs') 86 # print(c) # Counter({'s': 3, 'j': 3, 'a': 2, 'd': 2, 'f': 2, 'k': 1, 'l': 1}) 87 # c['d'] -= 1 88 # print(c) # Counter({'j': 3, 's': 3, 'f': 2, 'a': 2, 'k': 1, 'd': 1, 'l': 1}) 89 90 # c = Counter() # a new, empty counter 91 # print(c) # Counter() 92 # c = Counter('gallahad') # a new counter from an iterable 93 # print(c) # Counter({'a': 3, 'l': 2, 'd': 1, 'g': 1, 'h': 1}) 94 # c = Counter({'a': 4, 'b': 2}) # a new counter from a mapping 95 # print(c) # Counter({'a': 4, 'b': 2}) 96 # c = Counter(a=4, b=2) # a new counter from keyword args 97 # print(c) # Counter({'a': 4, 'b': 2})
defaultdict
1 from collections import defaultdict 2 3 values = [11, 22, 33,44,55,66,77,88,99,90] 4 5 my_dict = defaultdict(list) 6 7 for value in values: 8 if value>66: 9 my_dict['k1'].append(value) 10 else: 11 my_dict['k2'].append(value)
random模块
1 # import random 2 # random.random() # Get the next random number in the range [0.0, 1.0) 3 # print(random.random()) 4 5 # random.uniform(a,b) # Get a random number in the range [a, b) or [a, b] depending on rounding. 6 # a = random.uniform(1,3) 7 # print(a) 8 9 # print(random.randint(1,5)) # 大于等于1小于等于5之间的整数 10 11 # print(random.choice([1,'23',[4,5]])) # 1或者23或者[4,5] 12 # print(random.choice(1)) # TypeError: object of type 'int' has no len() 13 14 # print(random.sample([1,'23',[4,5]],2)) # 随机返回[1,'23',[4,5]]中的两个元素,返回的是一个列表 15 # 16 # print(random.sample(list({'k1':'v1','k2':'v2'}),2)) # ['k1', 'k2'] 17 18 # 打乱列表顺序 19 # item = [1,3,5,7,9] 20 # random.shuffle(item) 21 # print(item) 22 23 # 生成验证码 24 # import random 25 # def v_code(n=5): 26 # code = '' 27 # for i in range(n): 28 # num = random.randint(0,9) 29 # alf = chr(random.randint(65,90)) 30 # add = random.choice([num,alf]) 31 # code += str(add) 32 # return code 33 # print(v_code()) 34 35 # import random 36 # def v_code(n=5): 37 # code = '' 38 # for i in range(n): 39 # num = random.randint(0,9) 40 # alf = chr(random.randint(65,90)) 41 # add = random.choice([num,alf]) 42 # code = ''.join([code,str(add)]) 43 # return code 44 # print(v_code())
os模块
1 import os 2 # print(os.getcwd()) # Return a unicode string representing the current working directory 3 4 # os.chdir(r'E:\Python_Fullstack_S9') # Change the current working directory to the specified path. 5 # print(os.getcwd()) 6 7 # os.makedirs('dirname1/dirname2/dirname3') 8 # os.removedirs('dirname1/dirname2/dirname3') 9 # os.mkdir('dirname1/dirname2/dirname3') 10 11 # print(os.listdir(r'E:\Python_Fullstack_S9')) 12 13 # stat 系统调用时用来返回相关文件的系统状态信息的 14 # sta=os.stat('collections_module.py') 15 # print(sta) 16 # os.stat_result(st_mode=33206, # 权限模式 17 # st_ino=5910974510945247, # inode number 18 # st_dev=284297630, # device 19 # st_nlink=1, # number of hard links 20 # st_uid=0, # 所有用户的user id 21 # st_gid=0, # 所有用户的group id 22 # st_size=1641, # 文件的大小,以位为单位 23 # st_atime=1515569689, # 文件最后访问时间 24 # st_mtime=1515569689, # 文件最后修改时间 25 # st_ctime=1515566554) # 文件创建时间 26 27 # python os.stat() 和 stat模块详解: http://www.cnblogs.com/maseng/p/3386140.html 28 29 # print(os.sep) # \ 30 31 # os.system('dir') 32 # ret = os.popen('dir').read() 33 # print(ret) 34 # print(os.environ) 35 36 # print(os.getcwd()) # E:\Python_Fullstack_S9\Python_Fulldeck_S9_20171214\day19 37 # print(os.path.split(os.getcwd())) # ('E:\\Python_Fullstack_S9\\Python_Fulldeck_S9_20171214', 'day19') 38 39 # print(os.path.join(r'C:\Users\Administrator','user','local')) 40 # print(os.getcwd()) 41 # print(os.path.getsize(os.path.join(os.getcwd(),'time_module.py')))
sys模块
sys模块是与python解释器交互的一个接口
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1) sys.version 获取Python解释程序的版本信息 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称
1 import sys 2 # print(sys.platform) 3 # print(sys.version) 4 5 # print(sys.path.clear()) 6 7 # ret = sys.argv 8 # name = ret[1] 9 # pwd = ret[2] 10 # if name == 'alex' and pwd == 'alex3714': 11 # print('success') 12 # else: 13 # print('error') 14 # sys.exit() 15 # print('go on ....')
序列化模块
1 # import json 2 # json: dumps and loads 3 # dic = {"k":'v'} 4 # dic = (1,2,3,4) 5 # dic = {1:'a',2:'b',3:'c'} 6 # s = json.dumps(dic) 7 # print(dic,type(dic)) 8 # print(s,type(s)) 9 # dic2 = json.loads(s) 10 # print(dic2,type(dic2)) 11 12 # json: dump and load 13 # dic = {1:'a刘',2:'b严魁'} 14 # f = open('fff','w',encoding='utf-8') 15 # json.dump(dic,f,ensure_ascii=False) 16 # #If ``ensure_ascii`` is false, then the strings written to ``fp`` can 17 # # contain non-ASCII characters if they appear in strings contained in 18 # # ``obj``. Otherwise, all such characters are escaped in JSON strings. 19 # f.close() 20 21 # f2 = open('fff','r',encoding='utf-8') 22 # dic2 = json.load(f2) 23 # f2.close() 24 # print(dic2,type(dic2)) 25 26 # l = [{'k1':1111},{'k2':2222},{'k3':3333}] 27 # f = open('file','w') 28 # import json 29 # for dic in l: 30 # str_dic = json.dumps(dic)+'\n' 31 # f.write(str_dic) 32 # f.close() 33 34 # import json 35 # l = [] 36 # f = open('file') 37 # for line in f: 38 # d = json.loads(line.strip()) 39 # l.append(d) 40 # f.close() 41 # print(l)
re模块
1 import re 2 s = 'eva egon yuan' 3 4 # ret = re.findall('a',s) # 返回所有满足匹配条件的结果,放在列表里 5 # print(ret) # ['a', 'a'] 6 7 # ret = re.search('a',s) 8 # print(type(ret)) # <class '_sre.SRE_Match'> 9 # print(ret.group()) 10 # 函数会在字符串内查找模式匹配,直到找到第一个匹配,然后返回一个包含匹配信息的对象, 11 # 该对象通过group()方法得到匹配的字符串,如果字符串没有匹配,则返回None 12 13 # ret = re.match('a','abcabcabc').group() # 同search,不过只在字符串开始处进行匹配 14 # print(ret) # a 15 # ret = re.match('','abcabcabc').group() 16 # print(ret) 17 18 # ret = re.split('[ab]','abcd') # 先按a进行分割,再按b进行分割 19 # print(ret) # ['', '', 'cd'] 20 21 # ret = re.sub('\d','H','eva3egon4yuan4',1) # 将数字替换成H,参数1表示只替换一个 22 # print(ret) # evaHegon4yuan4 23 # ret = re.sub('\d','H','eva3egon4yuan4')#默认替换全部 24 # print(ret) 25 26 # ret = re.subn('\d','H','eva3egon4yuan4') # 将数字替换成H,返回元组:(替换的结果,替换了多少次) 27 # print(ret) # ('evaHegonHyuanH', 3) 28 29 # obj = re.compile('\d{3}') # 将正则表达式编译成一个正则表达式对象,规则要匹配的是3个数字 30 # ret = obj.search('abc123eeee') # 正则表达式对象调用search,参数为待匹配的字符串 31 # print(ret.group()) # 123 32 33 # obj = re.compile('\d{3}') 34 # ret = obj.findall('abc123ee123445df3452345245ee') 35 # print(ret) 36 37 # ret = re.finditer('\d+','ds3sy4784a64gs65dfg4s65dg') # 返回一个存放匹配结果的迭代器 38 # print(ret) # <callable_iterator object at 0x00000253828B13C8> 39 # print(next(ret).group()) 40 # print(next(ret).group()) 41 # print([i.group() for i in ret]) 42 43 44 # findall 的优先级查询: 45 # # ret = re.findall('www.(baidu|oldboy).com','www.oldboy.com') 46 # # print(ret) # ['oldboy']` 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可 47 # 48 # ret = re.findall('www.(?:baidu|oldboy).com','www.oldboy.com') 49 # print(ret) # ['www.oldboy.com'] 50 51 # split的优先级查询 52 # ret = re.split('\d+','eva3egon4yuan') 53 # print(ret) # ['eva', 'egon', 'yuan'] 没有(),则没有保留所匹配的项 54 # ret = re.split('(\d+)','eva3egon4yuan') 55 # print(ret) # ['eva', '3', 'egon', '4', 'yuan'] 有(),能够保留所匹配的项 56 57 # 匹配标签 58 # ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>",'<h1>hello</h1>') 59 # 可以在分组中利用?P<name>的形式给分组起名字 60 # 获取的匹配结果可以直接用group('名字')拿到对于的值 61 # print(ret.group()) # <h1>hello</h1> 62 # print(ret.group('tag_name')) # h1 63 64 # ret = re.search(r"<(\w+)>\w+</\1>","<h1>hello</h1>") 65 # 如果不给组起名字,也可以用\序号来找到对应的组,表示要找到的内容和前面的组内容一致 66 # 获取的匹配结果可以直接用group(序号)拿到对应的值 67 # print(ret.group(1)) # h1 68 # print(ret.group()) # <h1>hello</h1> 69 # print(type(ret)) 70 71 # 匹配整数 72 # ret = re.findall(r"\d+","1-2*(60+(-40.35/5)-(-4*3))") 73 # print(ret) # ['1', '2', '60', '40', '35', '5', '4', '3'] 74 # ret = re.findall(r"-?\d+\.\d*|(-?\d+)","1-2*(60+(-40.35/5)-(-4*3))") 75 # print(ret) # ['1', '-2', '60', '', '5', '-4', '3'] 76 ret = re.findall(r"-?\d+","1-2*(60+(-40.35/5)-(-4*3))") 77 print(ret) # ['1', '-2', '60', '', '5', '-4', '3'] 78 # ret.remove('') 79 # print(ret) # ['1', '-2', '60', '5', '-4', '3'] 80 81 # 数字匹配 82 # 1、 匹配一段文本中的每行的邮箱 83 # http://blog.csdn.net/make164492212/article/details/51656638 84 # 85 # 2、 匹配一段文本中的每行的时间字符串,比如:‘1990-07-12’; 86 # 87 # 分别取出1年的12个月(^(0?[1-9]|1[0-2])$)、 88 # 一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ 89 # 90 # 3、 匹配qq号。(腾讯QQ号从10000开始) [1,9][0,9]{4,} 91 # 92 # 4、 匹配一个浮点数。 ^(-?\d+)(\.\d+)?$ 或者 -?\d+\.?\d* 93 # ret = re.findall('-?\d+\.?\d*',"-1.35") 94 # print(ret) 95 # 96 # 5、 匹配汉字。 ^[\u4e00-\u9fa5]{0,}$ 97 # 98 # 6、 匹配出所有整数