zoukankan      html  css  js  c++  java
  • Python学习 Day 022

    主要内容:

    • 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模块

    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下为" ",Linux下为" "
    • os.pathsep    输出用于分割文件路径的字符串串 win下为;,Linux下为:
    • os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix

    注意:

    os.stat('path/filename')  获取文件/目录信息 的结构说明

    # stat 结构:
    
    st_mode: inode 保护模式
    st_ino: inode 节点号。
    st_dev: inode 驻留的设备。
    st_nlink: inode 的链接数。
    st_uid: 所有者的用户ID。
    st_gid: 所有者的组ID。
    st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
    st_atime: 上次访问的时间。
    st_mtime: 最后一次修改的时间。
    st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)

    6. sys模块

     sys模块是与python解释器交互的一个接口,所有和python解释器相关的都在sys模块.

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

     注:异常处理和status

    import sys
    try:
        sys.exit(1)
    except SystemExit as e:
        print(e)
  • 相关阅读:
    docker安装
    linux磁盘空间挂载
    python之MD5加密
    python之pymysql
    python 之Redis笔记
    python 随机生成中文名字
    python之json笔记
    python时间模块笔记
    python 用pip安装pymysql(win7下)
    数据库操作番外篇~
  • 原文地址:https://www.cnblogs.com/wcx666/p/9756452.html
Copyright © 2011-2022 走看看