random,time,datatime,json,pickle

collections

在内置数据类型(dic,list,set,tuple)的基础上,collections模块还提供了几个额外的数据类型:Counbter,deque,defaultdict,namedtuple和OrderedDict等

  1.  namedtuple: 生成可以使用名字来访问元素内容的tuple
  2.  deque: 双端队列,可以快读的从另外一次追加和推出对象
  3.  Counter: 计数器,主要用来计数
  4.  OrderedDict: 有序字典
  5.  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'))

  

 

posted @ 2020-08-23 19:17  闫世成  阅读(93)  评论(0)    收藏  举报