python基础(time模块、datetime模块、collections模块)

一、 时间模块:

  1.1 时间的三种表现形式:

    时间戳(timestamp)

    结构化时间(struct_time)

    字符串时间

  1.2 时间戳

    时间戳: 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型

  1.3 格式化字符串时间: 格式化的时间字符串(Format String)

  
格式化字符串时间: 格式化的时间字符串(Format String)
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 当前时区的名称
%% %号本身
View Code

  1.4 结构化时间:元组(struct_time) struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

  

  1.5 表示时间的几种格式

  
#导入时间模块
import time


time.sleep(1)  # (线程)推迟指定的时间运行。单位为秒

# 时间戳
print(time.time())   # 获取当前时间戳 返回的是float类型
# 1500875844.800804

# 时间字符串
print(time.strftime("%Y-%m-%d %X"))
# '2017-07-24 13:54:37'

print(time.strftime("%Y-%m-%d %H-%M-%S"))  # 时间格式可以自己设定
# '2017-07-24 13-55-04'

# 时间元组:localtime将一个时间戳转换为当前时区的struct_time
print(time.localtime())
View Code

    小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的

   1.6 时间格式转化:

    1.6.1 时间格式图例:

    

    1.6.2 时间格式化示例:

  
# 时间戳-->结构化时间
# time.gmtime(时间戳)    # UTC时间,与英国伦敦当地时间一致
# time.localtime(时间戳) # 当地时间。例如我们现在在北京执行这个方法:与UTC时间相差8小时,UTC时间+8小时 = 北京时间

print(time.gmtime())
print(time.gmtime(1500000000))

print(time.localtime())   # 获取本地结构化时间
print(time.localtime(1500000000))   # 指定结构化时间



# 结构化时间-->时间戳 
# time.mktime(结构化时间)
time_tuple = time.localtime(1500000000)
print(time.mktime(time_tuple))   # 转换成时间戳




# 结构化时间-->字符串时间
# time.strftime("格式定义","结构化时间")  结构化时间参数若不传,则显示当前时间
print(time.strftime("%Y-%m-%d %X"))  # 本地时间字符串 格式可以少写
print(time.strftime("%Y-%m-%d", time.localtime(1500000000)))   # 指定结构化时间转换成时间字符串



# 字符串时间-->结构化时间
# time.strptime(时间字符串,字符串对应格式)
print(time.strptime("2017-03-16", "%Y-%m-%d"))    # 格式一一对应
print(time.strptime("07/24/2017", "%m/%d/%Y"))
View Code

  1.7 其他格式化时间:

    1.7.1 图例:

      

    1.7.2 示例:

  
#结构化时间 --> %a %b %d %H:%M:%S %Y串
#time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串
>>>time.asctime(time.localtime(1500000000))
'Fri Jul 14 10:40:00 2017'
>>>time.asctime()
'Mon Jul 24 15:18:33 2017'



#时间戳 --> %a %b %d %H:%M:%S %Y串
#time.ctime(时间戳)  如果不传参数,直接返回当前时间的格式化串
>>>time.ctime()
'Mon Jul 24 15:19:07 2017'
>>>time.ctime(1500000000)
'Fri Jul 14 10:40:00 2017'
View Code

二、 日期和时间的标准库:

  2.1 datetime 用法:

  
# 日期与时间标准库:


from datetime import datetime

# 时间对象
print(datetime.now())  # 获取当前日期和时间


dt = datetime(2018, 5, 20, 13, 14)   # 获取指定某个日期和时间
print(dt)

# 时间对象 -->时间戳 -->时间对象
f = datetime.timestamp(datetime.now())  # 将时间对象转换成时间戳
print(datetime.fromtimestamp(f))        # 将时间戳转成时间对象


# 将字符串转成时间对象
print(datetime.strptime('2018-11-30', '%Y-%m-%d'))

# 将时间对象转成字符串
f = datetime.now()
print(datetime.strftime(f, '%Y-%m-%d'))
View Code

  2.2 datedelta 用法:

  
# 对日期和时间进行加减实际上就是把datetime往后或往前计算,得到新的datetime。
# 加减可以直接用+和-运算符,不过需要导入timedelta这个类:


from datetime import datetime, timedelta
now = datetime.now()
print(now)
now1 = now + timedelta(hours=10)
print(now1)
now2 = now - timedelta(days=1)
print(now2)
now3 = now + timedelta(days=2, hours=12)
print(now3)
View Code

三、 collections 模块:

  3.1 模块提供类型:

    1.namedtuple: 生成可以使用名字来访问元素内容的tuple

    2.deque: 双端队列,可以快速的从另外一侧追加和推出对象

    3.Counter: 计数器,主要用来计数

    4.OrderedDict: 有序字典

    5.defaultdict: 带有默认值的字典

  3.2 命名元组(namedtuple):

  
# 命名元组

from collections import namedtuple

# 格式:namedtuple('名称', [属性list])
tu = namedtuple('profile', ['name', 'age', 'sex', 'hobby'])   # 后面可以指定可迭代容器类型{}[]()
t = tu('alex', 19, '待定', '抽烟,喝酒,烫头')   # 生成一个命名元组
print(t)   # 打印

print(t.name)   # 获取名字
print(t.age)   # 获取姓名
View Code

  3.3 双端队列(deque):

    3.3.1 定义:

      使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低

    3.3.2 双端序列与列表的区别:

      列表:删除和插入会改变列表长度,会增加内存效率

          为啥呢存在列表:查找效率快,存在索引,建议通过列表作index和apend操作

      双端列表: 链表形式存在,删除和增加只需要改变链表指针,建议使用insert,pop等

    3.3.3 示例:

  
# 双端队列

from collections import deque

d = deque([1, 2, 3, 4])
d.append(5)    # 增加元素
print(d)
d.appendleft(10)  # 左边添加
print(d)
d.insert(2, 99)  # 插入元素


d.remove(3)   # 删除元素
print(d)

print(d.pop())  # 删除元素,返回删除值
print(d)
print(d.popleft())  # 从左边删除元素
print(d)
View Code

  3.4 计数器(Counter):

    3.4.1 定义:

      Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似

    3.4.2 示例:

  
# 计数器

from collections import Counter

c = Counter('abcdef')  # 迭代对象可以为 ''()[]
c = Counter([1, 2, 343, 2, 2, 12, 3, 4, 53, ])
print(c)
View Code

  3.5 默认字典(defaultdict):

  
# 默认字典
from collections import defaultdict

# 示例一:

li = [('红色', 1), ('黄色', 1), ('绿色', 1), ('蓝色', 1), ('红色', 5), ('绿色', 1), ('绿色', 1), ('绿色', 1)]

d = defaultdict(list)  # 生成一个默认字典
for i in li:
    d[i[0]].append(i[1])
dd = dict(d)

for em in dd:
    dd[em] = sum(dd[em])  # 累加运算

print(dd)


# 示例二:
val = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]

my_dict = defaultdict(list)

for value in val:
    if value > 66:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)


print(dict(my_dict))
View Code

  3.6 有序字典(OrderedDict):

    3.6.1 定义:

      python中3.6版本之后,字典的key默认有序

      pyhton3.6之前,使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序

     3.6.2 示例:

  
# 有序字典:

# 如果要保持Key的顺序,可以用OrderedDict
# 注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:

from collections import OrderedDict

d = dict([('a', 1), ('b', 2), ('c', 3)])  # dict的Key是无序的

od = OrderedDict(d)   # 生成有序字典,key有序(默认插入位置)
View Code

 

posted @ 2019-03-20 16:14  Amorphous  阅读(206)  评论(0编辑  收藏  举报