(七)常用模块----(二)
目录
7.1collections模块
collections模块,增加了除了dict、set、list、tuple以外的一些特殊的容器类型,分别是:
a. Counter:计数器,用于统计元素的数量,是字典的子类
b. OrderDict:有序字典,是字典的子类
c. defaultdict:带有默认值的字典
d. namedtuple:可命名元组,通过名字来访问元组元素
e. deque :双向队列,队列两端可以入队,也可以出队
Counter:用来计数
from collections import Counter
c = Counter('aaaasssxdcd')
print(c)#Counter({'a': 4, 's': 3, 'd': 2, 'x': 1, 'c': 1})
OrderDict:使字典的keys有序
dic = dict([('a',1),('b',2),('c',3)])
print(dic)
from collections import OrderedDict
dic = OrderedDict([('a',1),('b',2),('c',3)])
print(dic)
'''
普通字典现在规定也是有序
{'a': 1, 'b': 2, 'c': 3}
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
'''
defaultdict:带有默认值的字典
from collections import defaultdict
dic = defaultdict(list)
dic['k']
print(dic)
dic['k'].append('1')
dic['k'].append('2')
print(dic)
dic = defaultdict(tuple)
dic['k']
print(dic)
'''
defaultdict(<class 'list'>, {'k': []})
defaultdict(<class 'list'>, {'k': ['1', '2']})
defaultdict(<class 'tuple'>, {'k': ()})
'''
例题:1.大于66存在‘K1’,小于66存在'K2'
from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
dic = defaultdict(list)
for value in values:
if value>66:
dic['k1'].append(value)
else:
dic['k2'].append(value)
print(dic)
#defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]})
例题2.使字典默认返回一个数字
from collections import defaultdict
d = defaultdict(lambda : 5)
print(d['k'])
namedtuple:命名元组
from collections import namedtuple
Point = namedtuple('point',['x','y','z'])
p1 = Point(1,2,3)
p2 = Point(3,2,1)
print(p1.x)
print(p1.y)
print(p1,p2)
'''
1
2
point(x=1, y=2, z=3) point(x=3, y=2, z=1)
'''
deque:双段队列
from collections import deque
dq = deque()
dq.append('a') # 从后面放数据 ['a']
dq.appendleft('b') # 从前面放数据 ['b','a']
dq.insert(2,3) #第二个位置插入3['b',3,'a']
print(dq.pop()) # 从后面取数据
print(dq.pop()) # 从后面取数据
print(dq.popleft()) # 从前面取数据
print(dq)
'''
3
a
b
deque([])
'''
7.2时间模块
格式化时间 Fomat string —— 字符串: 给人看的 2019-04-21
时间戳时间 timestamp —— float时间 : 给计算机看的 从1970年1月1日00:00按秒计算
结构化时间 struct_time—— 元祖 :给计算用的
%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 | 当前时区的名称 |
%% | %号本身 |
索引(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 |
import time
#时间戳
print(time.time())
#格式化时间
print(time.strftime("%Y-%m-%d %a %H:%M:%S")) #year month day HOUR MINUTE SECOND
print(time.strftime("%Y/%m/%d %H:%M:%S")) #year month day HOUR MINUTE SECOND
print(time.strftime("%m-%d %H:%M:%S")) #year month day HOUR MINUTE SECOND
print(time.strftime("%H:%M:%S")) #year month day HOUR MINUTE SECOND
print(time.strftime("%H:%M")) #year month day HOUR MINUTE SECON
#结构化时间
struct_time = time.localtime()
print(struct_time)
print(struct_time.tm_year)
#time.struct_time(tm_year=2019, tm_mon=4, tm_mday=21, tm_hour=9, tm_min=36, tm_sec=29, tm_wday=6, tm_yday=111, tm_isdst=0)
#2019
import time
# 时间戳--->结构化时间
t = time.time()
print(t)
print(time.localtime(3000000000))
print(time.gmtime(t))
#结构化时间--->时间戳
print(time.mktime(time.localtime()))
'''
1555811795.531471
time.struct_time(tm_year=2065, tm_mon=1, tm_mday=24, tm_hour=13, tm_min=20, tm_sec=0, tm_wday=5, tm_yday=24, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=4, tm_mday=21, tm_hour=1, tm_min=56, tm_sec=35, tm_wday=6, tm_yday=111, tm_isdst=0)
1555811795.0
'''
##字符串时间-->结构化时间
print(time.strptime('2000-12.31','%Y-%m.%d'))
#结构化时间-->字符串时间
print(time.strftime('%m/%d/%Y %H:%M:%S',time.localtime(3000000000)))
'''
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)
01/24/2065 13:20:00
'''
#结构化时间 --> %a %b %d %H:%M:%S %Y串
#time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串
print(time.asctime())
print(time.asctime(time.localtime(1500000000)))
#时间戳 --> %a %b %d %H:%M:%S %Y串
#time.ctime(时间戳) 如果不传参数,直接返回当前时间的格式化串
print(time.ctime())
print(time.ctime())
'''
Sun Apr 21 10:07:34 2019
Fri Jul 14 10:40:00 2017
Sun Apr 21 10:07:34 2019
Sun Apr 21 10:07:34 2019
'''