python day21常用模块

⼀. 模块的简单认识
什么是模块. 模块就是我们把装有特定功能的代码进行归类的结果. 从代码编写的单位来看我们的程序, 从小到大的顺序: 一条代码 < 语句块 < 代码块(函数, 类) < 模块. 我们目前写的所有的py文件都是模块.

 

引入模块的⽅方式:
  1. import 模块
  2. from xxx import 模块

二.collection模块

collections模块主要封装了了⼀一些关于集合类的相关操作,还提供了⼀些除了基本数据类型以外的数据集合类型. Counter, deque, OrderDict, defaultdict以及namedtuple.

1.Counter

Counter是一个计数器,主要用来计数.

# 计算一个字符中每个字符出现的次数:
#方法一
s = "ccj like pig"
dic={}
for c in s:
    dic[c]=dic.setdefault(c,0)+1
print(dic) 
#{'c': 2, 'j': 1, ' ': 2, 'l': 1, 'i': 2, 'k': 1, 'e': 1, 'p': 1, 'g': 1}

#方法二(Counter):
from collections import Counter
print(Counter(s)) 
#Counter({'c': 2, ' ': 2, 'i': 2, 'j': 1, 'l': 1, 'k': 1, 'e': 1, 'p': 1, 'g': 1})

 

2.deque双向队列.

先了解两种数据结构:

  1.栈 : FILO. 取数据时 会''先进后出''.(砌墙后取砖头)

  2.队列 :  FILO.取数据时 会''先进先出''. (类似排队)

# 队列: python提供了queue模块. 使用起来非常方便
import queue
q = queue.Queue()
q.put("")
q.put("")
q.put("")

print(q.get())
print(q.get())
print(q.get())
print(q.get()) #这里无数据可取
# 注意. 如果队列里没有元素了. 再也拿不出来元素了,此时程序会阻塞.

 

 

deque, 注意, 此队列是collections中的.

from collections import deque
q = deque()
q.append("张开") # 右侧添加
q.append("贝尔")
q.appendleft("赵廷") # 左侧添加
q.appendleft("高圆")
print(q)              #deque(['高圆', '赵廷', '张开', '贝尔'])
print(q.pop())     #贝尔   #右侧删除
print(q.popleft()) #高圆    #左侧删除

 

 

3. namedtuple 命名元组

命名元组, 顾名思义. 给元组内的元素进⾏命名. 比如. 我们说(x, y) 这是⼀个元组. 同时. 我们还可以认为这是⼀个点坐标. 这时, 我们就可以使用namedtuple对元素进⾏命名.

from collections import namedtuple
# 自己定义了一个元组, 这其实就是创建了一个类
nt = namedtuple("point", ["x", "y"])
p = nt(1, 2)
print(p)  #point(x=1, y=2)
print(p.x)# 1
print(p.y)   # 2

 

 

4.defaultdict

defaultdict: 可以给字典设置默认值. 当key不存在时. 直接获取默认值:

from collections import defaultdict
dd = defaultdict(list) # 默认值list
print(dd['哈哈']) # [ ] 当key不存在的时候. 会自动执行构造方法中传递的内容.

 

lst =[11,22,33,44,55,66,77,88]
d=defaultdict(list)   #创建一个字典,默认字典里是列表
for el in lst:
    if el <66:
        d['K1'].append(el)  #字典里Key不存在,则取默认值空列表[], dic['key]会创建key.
    else:
        d['K2'].append(el)
print(d)  
#defaultdict(<class 'list'>, {'K1': [11, 22, 33, 44, 55], 'K2': [66, 77, 88]})

 

 

三. time 时间模块

import time

print(time.time()) #打印出当前系统时间(时间戳)  结果为一串数字如:1538927647.483177

 

在python中时间分成三种表现形式:

1. 时间戳(timestamp). 时间戳使用的是从1970年01月01⽇00点00分00秒到现在⼀共经过了多少秒... 使⽤float来表示.

2. 格式化时间(strftime). 这个时间可以根据我们的需要对时间进⾏任意的格式化.

3. 结构化时间(struct_time). 这个时间主要可以把时间进⾏行行分类划分. 比如. 1970年年01⽉月01⽇日 00点00分00秒 这个时间可以被细分为年, 月, 日.....⼀大堆东西.时间戳我们已经见过了就是time.time(). ⼀般, 我们不会把这样的时间显示给客户,那就需要对时间进行格式化操作.

import time
shijian = time.strftime("%Y-%m-%d %H:%M:%S") 
print(shijian) # 2018-11-14 19:27:12

 

 

日期格式化的标准:

%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   当前时区的名称
%%   %号本身

 

时间格式的转换:

时间戳 转 格式化时间, 需要先转成结构化时间再转格式化时间.

格式化时间 转 时间戳时间,需要先转成结构化时间再转时间戳时间.

也就是说都得通过结构化时间来转化.

#当前结构化时间
import time
print(time.localtime())
#结果: time.struct_time(tm_year=2018, tm_mon=11, tm_mday=14, tm_hour=19, tm_min=38, tm_sec=36, tm_wday=2, tm_yday=318, tm_isdst=0)

 

 

 比如. 我们的数据库中存储了这样⼀个时间: 1888888888. 如何显示成xxxx年xx月xx⽇?

import time
# 时间戳:1888888888
shijianchuo=1888888888  #时间戳为1888888888
t_jiegou=time.localtime(shijianchuo) #先为转结构化时间
print(t_jiegou)  #time.struct_time(tm_year=2029, tm_mon=11, tm_mday=9, tm_hour=11, tm_min=21, tm_sec=28, tm_wday=4, tm_yday=313, tm_isdst=0)

t_geshi=time.strftime('%Y-%m%-%d %H:%M:%S',t_jiegou) #再转格式化时间 (XXXX年-XX月-XX日 XX时:XX分:XX秒)
print(t_geshi) #打印出格式化后的时间  2029-11-09 11:21:28

格式化时间再转回时间戳:

#格式化时间转时间戳
s2='2029-11-09 11:21:28' # 格式化时间其实就是字符串格式
t_jiegou=time.strptime(s2,'%Y-%m-%d %H:%M:%S') #把格式化时间转成结构化时间
t_shijian=time.mktime(t_jiegou) #得到结构化时间,再转成时间戳
print(t_shijian) # 1888888888.0  一般带小数.0

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/chcj/p/9960113.html
今日推荐