Python学习 Day 022 - 常用模块01

主要内容:

  • 1. 模块的简单认识
  • 2. collections模块
  • 3. time时间模块
  • 4. random模块
  • 5. os模块
  • 6. sys模块

1. 模块的简单认识

    模块: 模块就是我们把装有特定功能的代码进行归类的结果,从代码编写的单位来看我们的程序, 从小到大的顺序:

    一条代码 < 语句句块 < 代码块(函数, 类) < 模块. 我们目前写的所有的py文件都是模块.         

引入模块的方式:           

  • 1. import 模块           
  • 2. from xxx import 模块       

 在之前的学习中, 我们已经用过了一些基本的模块了. 比如, random, os, sys, collections等等. 那我们目前用到的所有模块都是python内置的模块.不需要额外安装,在后面学习高级框架的内容的时候,可能需要我们自行安装一些第三方提供的模块.

2. collections模块

collections模块主要封装了一些关于集合类的相关操作. 比如, 我们学过的Iterable, Iterator等等. 

除了这些以外, collections还提供了一些除了基本数据类型以外的数据集合类型. Counter, deque, OrderDict, defaultdict以及namedtuple

(1)counter   counter是一个计数器,主要用来计数

#计算一个字符串中每个字符出现的次数
#以前方法
s = "asdwsadfadahasawwqasdsa"
dic ={}
for c in s :
    dic[c] = dic.get(c,0) +1
print(dic)
#使用模块
from collections import Counter
s = "asdwsadfadahasawwqasdsa"
print(Counter(s))

(2)双向队列

引入:两种数据结构      栈&队列

 (重点)说双向队列之前我们需要了解两种数据结构        

  •  栈:  FILO. 先进后出  -> 砌墙的砖头, 老师傅做馒头           
  •  队列: FIFO. 先进先出  -> 买火车票排队, 所有排队的场

手动写一个stack(粗略)模块

 
 
# 装馒头的桶
# 1. 入栈
# 2. 出栈
# 属性: 1. 列表(容器) 2.大小(size) 3. 栈顶指针(下一个装元素的位置)
class StackEmptyError(Exception):
    pass
class StackFullError(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:
            raise StackFullError("stack is full")
        else:
            self.lst.insert(self.index,el)
            self.index +=1

    def pop(self):
        if self.index > 0:
            self.index -= 1
            ret = self.lst[self.index]
            return ret
        else:
            raise StackEmptyError("stack is already empty")

    def clear(self):
        self.lst.clear()
        self.index = 0

    def __sizeof__(self):
        return len(self.lst)

    def max(self):
        return self.size

    def now(self):
        return self.index

s = Stack(5)
s.push("馒头1")
s.push("馒头2")
s.push("馒头3")
s.push("馒头4")
s.push("馒头5")
s.push("馒头6")

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

队列: python提供了queue模块. 使⽤用起来非常方便.

import queue
q = queue.Queue()    # 创建队列
q.put("周星驰")      # 放入元素
q.put("周润发")
q.put("周华健")
print(q)
print(q.get())       # 获取元素
print(q.get())
print(q.get())
print(q.get())       # 阻塞了. 在等下一个元素 另外input也有这种机制

关于deque  (双向队列)

from _collections import deque
d = deque()          #创建双向队列
d.append("大话西游")
d.append("九品芝麻官")
d.append("审死官")
d.append("功夫")
print(d)                   #deque(['大话西游', '九品芝麻官', '审死官', '功夫'])
d.appendleft("整蛊专家")   #从左侧添加
print(d)                   #deque(['整蛊专家', '大话西游', '九品芝麻官', '审死官', '功夫'])

namedtuple 命名元祖

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

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

#实际是创建了一个类
class Point:
    def __init__(self,x, y):
        self.x = x
        self.y = y
p = Point(1, 2)

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

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

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

from collections import defaultdict
dd = defaultdict(list)   #{} list() 必须是callable
print (dd["a"])       # 当key不存在的时候. 返回默认值.其实就是callable()
dd['b'] = 2
print(dd['b'])

3. time时间模块

import time
print(time.time())  # 1538990700.169158 系统时间

此时, 我们已经获取到了系统时间, 但是需要对时间进行格式化. 那这样就引出了另一种时间的格式. 在python中时间分成三种表现形式:

  • 时间戳(timestamp):时间戳使用的是从1970年年01月01⽇日 00点00分00秒到现在 一共经过了了多少秒... 使用float来表示
  • 格式化时间(strftime): 这个时间可以根据我们的需要对时间进行任意的格式化. 
  • 结构化时间(struct_time): 这个时间主要可以把时间进行分类划分. 比如.1970 年01月01日 00点00分00秒  这个时间可以被细分为年,月,日.......

(1)对时间进行格式化操作

import time
print(time.time())  # 1538991072.1594355 系统时间
s = time.strftime("%Y-%m-%d %H:%M:%S")
print(s)        # 2018-10-08 17:31: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 当前时区的名称
  • %% %号本身

(2)结构化时间

import time
print(time.localtime()) 
#time.struct_time(tm_year=2018, tm_mon=10, tm_mday=8, tm_hour=17, tm_min=38, tm_sec=46, tm_wday=0, tm_yday=281, tm_isdst=0)

(3) 时间转化

如果数据库中存储的时间  1888658888.24626

import time
t = time.localtime(1888658888.24626)          # 结构化时间,将时间戳转化为结构化时间
s = time.strftime("%Y-%m-%d %H:%M:%S",t)      #格式化时间
print(s)                                      #2029-11-06 19:28:08

 所有的转化都要通过结构化时间来转化.

另外,用户输入一个时间,转化成数据库的时间戳

import time
s = "2029-11-06 19:28:08"
st = time.strptime(s,"%Y-%m-%d %H:%M:%S")   # p:parse 转换
t = time.mktime(st)      #转化成时间戳
print(t)                 #1888658888.0

(4)计算时间差

4. random模块

所有关于随机相关内容都在random模块中

import random
print(random.random())          #0-1之间的一个随机的小数
print(random.uniform(1,3))      # 1-3之间的一个随机小数

print(random.randint(1,6))      #1-6之间的一个随机的整数  [1,6]
print(random.randrange(1,8,2))   #1-8之间的随机整数 [1,10)

print(random.choice([1,"周杰伦",["一路向北","青花瓷","彩虹"]]))
print(random.sample([1,"23",[4,5]],2))      #列表元素任意组合两个

lst = [1,2,3,4,5,6,7,8,9]
random.shuffle(lst)             #随机打乱顺序
print(lst)

5. os模块

所有和操作系统相关的内容都在os模块

os.makedirs('dirname1/dirname2')    可生成多层递归目录

os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推

import os
os.makedirs("a/b/c/d")       #创建多级目录
os.removedirs("a/b/c/d")       # 空目录可以删除. 非空的不能删
  • 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
  • os.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

6. sys模块

 所有和python解释器相关的都在sys模块.

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

猜你喜欢

转载自www.cnblogs.com/wcx666/p/9756452.html
022