zoukankan      html  css  js  c++  java
  • 常用模块-01

    本节主要内容:

    1.模块的简单认识

    2.collections模块

    3.time时间模块

    4.random模块

    5.os模块

    6.sys模块

     一.模块的简单认识

    模块:就是我们把装有特定功能的代码进行归类的结果.

    引入模块的方式

    1.import 模块

    2.from xxx import 模块

    二.collections模块

    collections模块主要封装了一些关于集合类的相关操作.例如:Iterable,Iterator等等.

    1.Counter

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

    计算一个字符串中每个字符出现的次数:

    from collections import Counter
    
    s = "life is a chocolate"
    ss = Counter(s)
    print(ss)
    # 结果:
    # Counter({' ': 3, 'l': 2, 'i': 2, 'e': 2, 'a': 2, 'c': 2, 'o': 2, 'f': 1, 's': 1, 'h': 1, 't': 1})

    2.deque双向队列

    在说双向队列之前我们先了解两种数据结构:

    1.栈:FILO.它的特点是先进后出

    2.队列:FIFO.先进先出

    由于python中没有给出栈(stack)模块,我们可以粗略写一个栈的模块:

    class StackFullError(Exception):
        pass
    
    
    class StackEmptyError(Exception):
        pass
    
    #
    class Stack:
        def __init__(self,size):
            self.size = size
            self.index = 0
            self.lst = []
    
        def push(self,el):
            if self.index == self.size:
                raise StackFullError("the stack is full")
            self.lst.insert(self.index,el)
            self.index += 1
    
        def pop(self):
            if self.index == 0:
                raise StackEmptyError
            self.index -= 1
            c =self.lst.pop(self.index)
            return c
    
    
    st = Stack(3)
    st.push("早上好")
    st.push("中午好")
    st.push("晚上好")
    
    print(st.pop())
    print(st.pop())
    print(st.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()) #队列中如果没有元素了,继续获取的话,会阻塞

    注意.如果队列里没有元素了.再也就拿不出来元素了,此时程序会阻塞.

    双向队列deque,此队列是collections中的.

    from collections import deque
    
    q = deque()
    q.append("Mandy")
    q.append("Cassie")  # 右侧添加
    q.appendleft("Luis")    # 左侧天剑
    q.append("Hans")
    
    print(q.pop())  # 右侧删除
    print(q.popleft())  # 左侧删除
    print(q.pop())
    print(q.popleft())

    3.namedtuple 命名元组

    命名元组: 给元组内的元素进行命名.

    from collections import namedtuple
    
    # 定义元组,其实相当于创建了一个类
    ppp = namedtuple("hah",["x","y","c"])
    p = ppp(1,2,3)
    print(p)
    # p.c = 15  # 报错,因为ppp始终是个元组,元组不能进行增删改操作
    print(p.y)

    4.orderdict 和 defaultdict

    orderdict: 字典的key默认是无序的,而OrderDict是有序的

    dic = {'a':'娃哈哈', 'b':'薯条', 'c':'胡辣汤'} 
    print(dic)
     
    from collections import OrderedDict 
    od = OrderedDict({'a':'娃哈哈', 'b':'薯条', 'c':'胡辣汤'}) 
    print(od)

    由于python3.5后的版本打印字典都默认按输入时顺序打印,所以看不出效果.但是内部储存还是无序的,因为字典的key是按hash列表储存的.

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

    from collections import defaultdict
    
    dc = defaultdict(list)  # 括号里面的是一个可被调用的对象
    print(dc["周星驰"])
    # 结果: []

    三.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秒 这个时间可以被细分为年,月,日,星期,等等...

    我们一般展示给客户看的时间都是进行格式化后的时间,而不是时间戳.

    s = time.strftime("%Y-%m-%d %H:%M:%S")    # 必须记住
    print(s)
    # 从时间戳 -> 格式化时间
    t = time.localtime(1542513992) # 时区   gmtime() 格林尼治时间.
    print(t)
    str_time = time.strftime("%Y-%m-%d %H:%M:%S", t)
    print(str_time)

    结果: 2018-11-18 12:06:32

    日期格式化的标准:

    %y 两位数的年份表示(00-99)

    %Y 四位数的年份表示(0000-9999)

    %m 月份(01-12

    %d 月内中的一天(0-31)

    %H 24小时制小时数(0-23)

    %I 12小时制小时数(01-12)

    %M 分钟数(0-59)

    %S 秒 (00-59)

    %a 本地简化星期名称

    %A本地完整星期名称

    %b 本地简化的月份名称

    %B 本地完整的月份名称

    %c 本地相应的日期表示和时间表示

    %j 年内的一天(001-366)

    %p 本地A.M.或P.M.的等价符

    %U 一年中的星期数(00-53)

    %w 星期(0-6),星期天为星期的开始

    %x 本地相应的日期表示

    %X 本地相应的时间表示

    %Z 当前时区的名称

    %% %号本身

    结构化时间:

    print(time.localtime()) 
    结果: time.struct_time(tm_year=2017, tm_mon=05, tm_mday=8, tm_hour=10, tm_min=24, tm_sec=42, tm_wday=0, tm_yday=126, tm_isdst=0) 

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

    # 数据库里存了一个时间戳 1888888888
    # 从时间戳 -> 格式化时间
    t = time.localtime(1542513992) # 时区   gmtime() 格林尼治时间.
    print(t)
    str_time = time.strftime("%Y-%m-%d %H:%M:%S", t)
    print(str_time)
    
    用户输入一个时间. 变成时间戳
    格式化时间 -> 时间戳
    2018-11-18 12:06:32
    s = "2018-11-18 12:06:32"
    t = time.strptime(s, "%Y-%m-%d %H:%M:%S") #  string parse time
    print(t)
    # 结构化时间 -> 时间戳
    ss = time.mktime(t)
    print(ss)
    print(time.strftime("%Y年%m月%d日"))
    
    # 中文
    import locale
    locale.setlocale(locale.LC_CTYPE, "chinese")

    计算时间差:

    第一种算法:

    begin = "2018-11-14 16:30:00"
    end = "2018-11-14 18:00:00"
    # 用时间戳计算出时间差(秒)
    begin_struct_time = time.strptime(begin, "%Y-%m-%d %H:%M:%S")
    end_stract_time = time.strptime(end, "%Y-%m-%d %H:%M:%S")
    
    begin_second = time.mktime(begin_struct_time)
    end_second = time.mktime(end_stract_time)
    
    # 秒级的时间差   180000
    diff_time_sec = abs(begin_second - end_second)
    
    # 转换成分钟
    diff_min = int(diff_time_sec//60)
    print(diff_min)
    
    diff_hour = diff_min//60  # 1
    diff_min_1 = diff_min % 60 # 30
    
    print("时间差是 %s小时%s分钟" % (diff_hour, diff_min_1))

    第二种算法:

    begin = "2019-11-14 16:30:00"
    end = "2018-11-14 18:00:00"
    # 用时间戳计算出时间差(秒)
    begin_struct_time = time.strptime(begin, "%Y-%m-%d %H:%M:%S")
    end_stract_time = time.strptime(end, "%Y-%m-%d %H:%M:%S")
    
    begin_second = time.mktime(begin_struct_time)
    end_second = time.mktime(end_stract_time)
    
    # 秒级的时间差  180000
    diff_time_sec = abs(begin_second - end_second)
    
    # 转化成结构化时间
    t = time.gmtime(diff_time_sec) # 最好用格林尼治时间。 否则有时差
    print(t)
    
    print("时间差是%s年%s月 %s天 %s小时%s分钟" % (t.tm_year-1970, t.tm_mon-1, t.tm_mday-1,t.tm_hour, t.tm_min ))

    关于time模块还需要去看的内容: datetime(时间), calender(日历)

    四.random模块

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

    import random
    
    print(random.randint(1,2))  # [start, end]
    print(random.random()) # (0,1)之间的小数
    print(random.uniform(3,10)) # (3, 10 )的随机小数
    
    n = random.randrange(1, 10, 3) # [1, 10) 从奇数中获取到随机数
    while n != 10:
        n = random.randrange(1, 10, 3)
    
    for i in range(1, 10, 3):
        print(i)
    
    print(random.choice([1, '周杰伦', ["盖伦", "胡辣汤"]])) # 列表中的任意一个元素
    print(random.sample([1, '23', [4, 5]], 2)) # 列表元素任意2个组合
    
    lst = ["周杰伦", "昆凌", "马化腾", "马丽", "沈腾", "秋雅"]
    random.shuffle(lst) # 随机打乱顺序
    print(lst)

    五.os模块

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

    import os
    os.makedirs('dirname1/dirname5') # 创建文件夹目录结构
    os.removedirs('dirname1/dirname5')  # 删除文件夹, 如果文件夹内没有东西。 就可以删除。 否则报错
    
    os.mkdir('dirname/哈哈')  # mkdir如果父级目录不存在。 报错
    os.rmdir('dirname') # 删除文件夹
    
    print(os.listdir('../')) # 获取到文件夹内的所有内容. 递归
    
    print(os.stat('dirname')) # linux
    
    os.system("dir") # 直接执行命令行程序
    s = os.popen("dir").read()
    print(s)
    
    print(os.getcwd() ) # 当前程序所在的文件夹
    
    print(os.path.abspath("../day020 继承") ) # 获取绝对路径
    print(os.path.split("D:python_workspaceday020 继承")) # 拆分路径 ('D:\python_workspace', 'day020 继承')
    print(os.path.dirname("D:python_workspaceday020 继承")) # D:python_workspace
    print(os.path.basename("D:python_workspaceday020 继承")) # day020 继承
    
    print(os.path.exists("dirname")) # 判断文件是否存在
    print(os.path.isabs("D:python_workspaceday020 继承")) # 是否是绝对路径
    
    print(os.path.isfile("01 今日主要内容")) # 是否是文件
    print(os.path.isdir("dirname")) # 是否是文件夹
    
    print(os.path.getsize("01 今日主要内容") ) # 文件大小
    
    print("胡辣汤", "传盛", "big", sep="small")
    
    print("c:"+os.sep+"胡辣汤") # \/  文件路径的分隔符
    
    print(os.name) # nt

    os.stat()属性解读:

    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)是创建时间(详细信息参见平台的文档)。

    六.sys模块

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

    sys.argv           命令行参数List,第一个元素是程序本身路径 
    sys.exit(n)        退出程序,正常退出时exit(0),错误退出sys.exit(1) sys.version        获取Python解释程序的版本信息 
    sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 
    sys.platform       返回操作系统平台名称
  • 相关阅读:
    http://download.microsoft.com/download/A/9/1/A91D6B2BA79847DF9C7EA97854B7DD18/VC.iso
    你的公积金账户在易才,请联系: 地址:武汉市汉口解放大道686号武汉世界贸易大厦49层612 客服电话:85362651 联系人:刘思明
    22
    http://www.cnblogs.com/uniqueliu/archive/2011/08/03/2126545.html
    多层的一个框 架
    MS Jet SQL for Access 2000中级篇
    窗体间传递复杂数据
    小议数据库主键选取策略(转)
    eWebSoft在线编辑器实例说明
    一个程序详细研究DataReader(转)
  • 原文地址:https://www.cnblogs.com/af1y/p/9960385.html
Copyright © 2011-2022 走看看