22.模块

二.今日内容大纲

1.collections

2.queue队列

3.time

4.random

5.os,sys

序列化模块和模块的调用
 # 模块就是我们把装有特定功能的代码进行归类的结果,从代码编写来看我们的程序,顺序为
  # 一条代码 < 语句块 < 代码块(函数,类) < 模块   py 文件就是模块
  # 引入模块的方式:
  # 1.import 模块
  # 2.from xxx import 模块

collections模块

1.collections模块
collections 模块主要封装了一些关于集合类的相关的操作,比如Iterable,Iteractor
还有一些基本数据类型以外的数据集合类型 Counter,deque,orderDict,namedtuple
counter
计算字符串中每个字符出现的次数
s = 'sdhfsfhdsfheweiuriwelwefwicjwe'
dic = {}
for i in s:
    dic[i] = dic.get(i,0) + 1
print(dic)  #传统的算法统计方式

from collections import Counter  #引入模块,计数器
c = Counter(s)
print(c)#获取到的结果可以像字典一样进行使用[key]
print(c['w'])#统计单个字符

lst = ['提莫','鳄鱼','蛮王','盖伦','鳄鱼']
c = Counter(lst)
print(c)

 

队列和栈
#2.deque 双向队列
# 重点
#需要先了解两种数据结构,1.栈,2,队列
# 1.栈  先进后出 First in Lst Out  FILO
#2.队列  先进先出 First in  First Out  FIFO  重点
#

#队列 在python 中提供了queue模块 ,使用起来非常方便
# import queue
# q = queue.Queue()   #创建队列
# q.put('盖伦')   #放入元素
# q.put('亚索')
# q.put('剑圣')
# q.put('杰斯')
#
# print(q.get())  #获取元素
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())  #当没有元素的时候,阻塞了,在等下一个元素

# from collections import deque
# q = deque()
# q.append('盖伦')  #右侧添加
# q.append('诺克')
# q.appendleft('蛮王')  #左侧添加
# q.append('锤石')
#
# print(q)
#
# print(q.pop())  #右侧删除
# print(q.popleft())   #左侧删除

由于Python中没有给出栈的模块,需要自己写

由于python没有给出stack模块,需要手写一个栈的粗略版本
类似于一个装馒头的桶 要写栈 重要的两步,1.入栈 2.出栈
属性  1.列表(容器)  2.大小 size  3.栈顶指针


class StackFullError(Exception):
    pass
class StackEmptyError(Exception):
    pass

class Stack:
    def __init__(self,size):
        self.index = 0  #栈顶指针
        self.size = size
        self.lst = []   #容器
    def push(self,el):
        if self.index < self.size:    #还没有装满
            self.lst.insert(self.index,el)
            self.index += 1
        else:     #装满了
            raise StackFullError('列表满了,装不下了')
    def pop(self):
        if self.index > 0:
            self.index -= 1
            return self.lst[self.index]
        else:
            raise  StackEmptyError('都取完了,还取个捶捶')


#使用 实例化栈
s = Stack(10)
s.push("馒头1")
s.push("馒头2")
s.push("馒头3")
s.push("馒头4")
s.push("馒头5")
s.push("馒头6")
s.push("馒头7")
s.push("馒头8")
s.push("馒头9")
s.push("馒头10")

print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())

 

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

from collections import namedtuple
#自己定义元组
po = namedtuple('point',['x','y'])  #定义了简单的类
p = po(1,2)   #命名元祖
print(p)

class Point:
    def __init__(self,x,y):
        self.x = x
        self.y = y
p =Point(1,2)
print(p)

orderedDict 和 defaultdict

orderdict 顾名思义,字典的key默认是无序的,而Orderdict是有序的

d = {"a":1,"b":2,"c":3}
print(d)

from collections import OrderedDict
od = OrderedDict({"a":1,"b":2,"c":3})
print(od.get('b'))
print(od['b'])


defaultdict:可以给字典设置默认值,当key不存在时,直接获取默认值:
from collections import defaultdict
d = defaultdict(list)
d['盖伦'] = '德玛'
print(d['亚索'])  #当key不存在的时候,会自动执行构造方法中传递的内容
print(d['盖伦'])

 

时间模块(重点)

包括系统时间和格式化时间的两种相互转换   非常重要 必须记住

'time 重点
   时间模块是我们需要熟记的,后面写程序经常能遇到,比如计算时间差,按照
客户要求展示时间

import time
print(time.time())  #1539870395.3688216  系统时间,计算机识别的

这样得到的是系统时间,需要对时间进行格式化,引出另一种时间的格式
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
print(time.time())
s = time.strftime('%Y/%m/%d %H:%M:%S')
print(s)

打印当前时间

日期格式化的标准

# 日期格式化的标准
'''%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(0000-9999)
%m 月份(01-12)
%d 月分内的一天(01-31)
%H 24小时制小时数(0-23)
%I 十二小时制小时数 (0-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 当前时区的名称 
%% %号本身 '''

 

时间戳与结构化时间的相互转换
print(time.localtime())  #用来计算的
import time
f =12982948394
st = time.localtime()    #将时间戳转化成结构化时间
print(st)
#格式化时间
t = time.strftime('%Y/%m/%d %H:%M:%S',st)
print(t)

用户输入了一个时间,2018-09-08 11:22:36  存储成时间戳
先把格式化时间转换成结构化时间
import time
s = '2018-09-08 11:22:36'
st = time.strptime(s,'%Y-%m-%d %H:%M:%S')
print(st)
t = time.mktime(st)
print(t)

random模块

# 所有的随机相关的内容都在random模块中
import random
# print(random.random())   #随机打印0-1之间的小数
# print(random.uniform(3,10))  #随机打印3-10之间的小数
#
# print (random.randint(1,10))  #随机打印1-10之间的整数
# print(random.randrange(1,10,2)) #随机打印1-10之间的奇数
#
# print(random.choice(['盖伦','亚索',['蛮王','杰斯']]))   #随机选择,也可以是列表中的列表
#
# print(random.sample(['1','23',[4,5]],2))   #列表任意两个元素组合
#
#
# lst = [1,2,3,4,4,55,5,67,5]
# random.shuffle(lst)   #随机打乱顺序
# print(lst)

 

os模块
import os

# 创建多层目录
# os.makedirs('a/b/c/d')
# os.removedirs('a/b/c/d')  # 空目录可以删除. 非空的不能删


# os.system('dir')  #运行shell命令,直接显示
# ret = os.popen('dir').read()   #执行命令返回结果
# print(ret)
'''
os.makedirs('dirname1/dirname2')    可生成多层递归目录
os.removedirs('dirname1')   若目录为空,则删除,并递归到上一级目录,如若也为空,则删 除,依此类推
os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    删除单级空目录,若目录不不为空则无法删除,报错;相当于shell中 rmdir dirname
os.listdir('dirname')    列列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式 打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat('path/filename')  获取文件/目录信息
os.system("bash command")  运行shell命令,直接显示
os.popen("bash command).read()  运⾏行行shell命令,获取执⾏行行结果 "
"os.getcwd() 获取当前⼯工作⽬目录,即当前python脚本⼯工作的⽬目录路路径 "
"os.chdir("dirname")  改变当前脚本⼯工作⽬目录;相当于shell下cd # os.path os.path.abspath(path) 返回path规范化的绝对路路径" \
 os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。 即os.path.split(path)的第二个元素
os.path.exists(path)  如果path存在,返回True;如果path不不存在,返回False
os.path.isabs(path)  如果path是绝对路路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False o
s.path.join(path1[, path2[, ...]])  将多个路路径组合后返回,第一个绝对路路径之前的参数 将被忽略略
os.path.getatime(path)  返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小 # 特殊属性: 
# os.sep    输# 出操作系统特定的路路径分隔符,win下为"\\",Linux下为"/"
#  os.linesep    输出当前平台使⽤用的⾏行行终⽌止符,win下为"\r\n",Linux下为"\n" 
# os.pathsep    输出⽤用于分割⽂文件路路径的字符串串 win下为;,Linux下为: 
# os.name    输出字符串串指示当前使⽤用平台。win->'nt'; Linux->'posix''''

sys 模块

'''sys.argv    命令行参数,第一个元素是程序本身路径
sys.exit   退出程序,正常退出时exit(0)错误时退出exit(1)
sys.version  获取python解释器的版本
sys.path   返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform    返回操作系统平台名称'''

 



 





































posted on 2018-10-18 23:12  小王子QAQ  阅读(37)  评论(0)    收藏  举报