random,time,datatime,json,pickle
collections
在内置数据类型(dic,list,set,tuple)的基础上,collections模块还提供了几个额外的数据类型:Counbter,deque,defaultdict,namedtuple和OrderedDict等
- namedtuple: 生成可以使用名字来访问元素内容的tuple
- deque: 双端队列,可以快读的从另外一次追加和推出对象
- Counter: 计数器,主要用来计数
- OrderedDict: 有序字典
- defaultdict: 带有默认值得字典
namedtuple
from collections import namedtuple
Point = namedtuple('point',['x','y'])
p = Point(1,2)print(p.x) # 取值
print(p.y)print(p)
队列
import queue q = queue.Queue() q.put([1,2,3]) q.put(5) q.put(6) print(q.qsize()) print(q.get()) # 取不到值会阻塞 [1, 2, 3]
双端队列
from collections import deque
dq = deque([1,2]) # 创建一个队列
dq.append('a') # 从后面放入一个数据 [1, 2, 'a']
dq.appendleft('b') # 从前面放入一个数据 ['b', 1, 2, 'a']
dq.insert(2,3) # 插入一条数据 在某值前面 插入数据 ['b', 1, 3, 2, 'a']
print(dq.pop()) # 从后面取值 a
print(dq.popleft()) # 从前面取值 b
print(dq) #deque(['b', 1, 3, 2, 'a'])
OrderedDict
使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。
如果要保持Key的顺序,可以用OrderedDict:
from collections import OrderedDict
d = dict([('a', 1), ('b', 2), ('c', 3)])
d # dict的Key是无序的
{'a': 1, 'c': 3, 'b': 2}
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
od # OrderedDict的Key是有序的
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:
od = OrderedDict() od['z'] = 1 od['y'] = 2 od['x'] = 3 od.keys() # 按照插入的Key的顺序返回 ['z', 'y', 'x']
defaultdict
有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66 , 'k2': 小于66}# 原生字典的方法
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = {}
for value in values:
if value>66:
if my_dict.has_key('k1'):
my_dict['k1'].append(value)
else:
my_dict['k1'] = [value]
else:
if my_dict.has_key('k2'):
my_dict['k2'].append(value)
else:
my_dict['k2'] = [value]
# defaultdict字典解决方法
from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = defaultdict(list)
for value in values:
if value>66:
my_dict['k1'].append(value)
else:
my_dict['k2'].append(value)
Counter
Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。
c = Counter('abcdeabcdabcaba')
print c
输出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
time
表示时间的三种方式
在Python中,通常用这三种方式来表示时间:时间戳,元祖(struct_time),格式化的时间字符串
1) 时间戳(timestamp): 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,我们运行"type(time.time())",返回的是 float类型
2) 格式化的时间字符串(Format String): '1998-10-16'
3) 结构化时间-元祖(struct_time): struct_time 元祖共有九个元素:(年,月,日,时,分,秒,一年中第几个周,一年中第几天等)
| 索引(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
time.gmtime() # utc时间
time.sleep(1) # 睡眠
print(time.time()) # 时间戳时间
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 格式化时间
# asctime
print(time.asctime())
# 时间戳转换为 asctime 格式
print(time.asctime(time.localtime()))

时间戳和结构化互转
# 时间戳转换结构化时间 statime = time.time() time.localtime(statime) # 北京时间 time.gmtime(statime) # UTC 时间 # 结构化时间转换时间戳 localtime = time.localtime() time.mktime(localtime)
结构化和格式化互转
# 结构化时间转换格式化时间
time.strftime('%Y-%m-%d',time.localtime(time.time()))
time.strftime('%Y-%m-%d',time.localtime(time.time()-86400))
time.strftime("%Y-%m-%d",time.localtime(1500000000))
# 格式化时间转换结构化时间
time.strptime('2019-10-1','%Y-%m-%d')
datatime
# date 对象由 year 年份,month 月份, day日期三部分组成
l = datetime.date.today()
print(l) # 2020-08-23
print(l.day)
print(datetime.date(2020,1,1).isoformat())
print(datetime.date(2020,1,1).isoweekday()) # 周几
print(datetime.datetime.now()) # 2020-08-23 21:18:47.557050
print(datetime.datetime.now().date()) # 2020-08-23
print(datetime.datetime.now().time()) # 21:19:47.265368
print(datetime.datetime.now().utctimetuple()) # 返回 utc 时间元祖
# datetime.datetime.combine(a.date(),a.time())
print(datetime.datetime.strptime('2017-3-22 15:25','%Y-%m-%d %H:%M'))
date = datetime.datetime.now()
print(date.strftime('%Y-%m-%d %H:%M')) # 2020-08-23 21:26
print((date+datetime.timedelta(days=-1)).strftime('%Y-%m-%d %H:%M'))
作者:闫世成
出处:http://cnblogs.com/yanshicheng

浙公网安备 33010602011771号