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

    本节主要内容:

    1. 模块的简单认识

    2. collections模块

    3. time时间模块

    4. random模块

    5. os模块

    6. sys模块

    一. 模块的简单认识

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

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

    引入模块的⽅方式:            

    1. import 模块           

    2. from xxx import 模块       

    关于这两种写法. 我们后⾯面还要继续介绍. 在之前的学习中, 我们已经用过了一些基本的 模块了了. 比如, random, os, sys, collections等等. 那我们目前⽤用到的所有模块都是python内 置的模块.不需要额外安装. 在后⾯面学习⾼高级框架的内容的时候. 可能需要我们⾃行安装一些 第三方提供的模块.

    二. collections模块

    collections模块主要封装了一些关于集合类的相关操作. 比如, 我们学过的Iterable, Iterator等等.  除了了这些以外, collections还提供了一些除了基本数据类型以外的数据集合类 型. Counter, deque, OrderDict, defaultdict以及namedtuple

     1. Counter           

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

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

    from collections import Counter
    s = "I am sylar, I have a dream, freedom...."
    qq = counter(s)
    print(s)

    2. deque 双向队列

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

    1. 栈:  FILO. 先进后出  -> 砌墙的砖头, 老师傅做馒头           

    2. 队列: FIFO. 先进先出  -> 买火车票排队, 所有排队的场景

    # class StackFullError(Exception):
    #     pass
    # class StackEmptyError(Exception):
    #     pass
    #
    # class Stack:
    #     def __init__(self, size):
    #         self.index = 0 #  栈顶指针
    #         self.lst = []
    #         self.size = size
    #
    #     # 给栈添加元素
    #     def push(self, item):
    #         if self.index == self.size:
    #             # 栈已经满了. 不能再装东西了
    #             raise StackFullError('the stack is full')
    #         self.lst.insert(self.index, item) # 对于空列表. 需要insert插入内容
    #         # self.lst[self.index] = item # 把元素放到栈里
    #         self.index += 1     # 栈顶指针向上移动
    #
    #     # 从栈中获取数据
    #     def pop(self):
    #         if self.index == 0:
    #             raise StackEmptyError("the stack is empty")
    #         self.index -=1 # 指针向下移动
    #         item = self.lst.pop(self.index) # 获取元素. 删除.
    #         return item
    # s = Stack(5)
    # s.push("馒头1号")
    # s.push("馒头2号")
    # s.push("馒头3号")
    # s.push("馒头4号")
    # s.push("馒头5号")
    #
    # print(s.pop())
    # print(s.pop())
    # print(s.pop())
    # print(s.pop())
    # print(s.pop())

     队列

    # 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()) # 队列中如果没有元素了. 继续获取的话. 会阻塞
    # print("拿完了")

     双向队列

    # from collections import deque
    #
    # q = deque() # 创建一个双向队列
    # q.append("高圆圆")
    # q.append("江疏影")
    # q.appendleft("赵又廷")
    # q.appendleft("刘大哥")
    # #  刘大哥 赵又廷 高圆圆 江疏影
    # print(q.pop()) # 从右边获取数据
    # print(q.pop())
    # print(q.popleft()) # 从左边获取数据
    # print(q.popleft())
    # print(q.pop())

    3. namedtuple 命名元组

    # from collections import namedtuple
    #
    # point = namedtuple("Point", ["x", "y", 'z']) # 这个就相当于写了一个类
    # # class point:
    # #     def __init__(self, x, y):
    # #         self.x = x
    # #         self.y = y
    #
    # p = point(5, 18, 88)
    # print(p.x)
    # print(p.y)
    # # p.x = 19 # 终归是一个元组
    # print(p)

    4. orderdict和defaultdict

    # dic = {'a':'娃哈哈', 'b':'薯条', 'c':'胡辣汤'}
    # print(dic) # 最底层一定是无序的. 最底层是hash
    #
    # from collections import OrderedDict
    # # 按照我们存储的顺序保存数据
    # od = OrderedDict({ 'b':'薯条','a':'娃哈哈', 'c':'胡辣汤'})
    # print(od)
    # lst= [11,22,33,44,55,66,77,88,99]
    # d = defaultdict(list)
    # for el in lst:
    #     if el < 66:
    #         d["key1"].append(el) # key1默认是不存在的. 但是可以拿key1. 一个空列表.
    #     else:
    #         d["key2"].append(el)
    # print(d)

     三. time 时间模块(重点)

      时间模块是我们要熟记的. 到后面写程序的时候经常能用到. 比如, 如何计算时间差. 如何按照客户的要求展示时间. 等等.

    import time

    print(time.time())  # 1538927647.483177  系统时间

    日期格式化的标准:

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

    从时间戳 -> 格式化时间

    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")


    # 时间差  1小时30分
    # 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 ))
     
    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.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
    import sys
    # sys.exit(1) # 正常退出
    # print(sys.version)
    # print(sys.platform) # 平台名称

    print(sys.path) #  搜索模块的路径
    sys.path.append("e:/")
    import master
    master.chi()
     
    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)是创建时间(详细信息参⻅见平台的⽂文档)。
     
  • 相关阅读:
    Git 安装配置,key导入
    Android集成支付宝的坑
    RxJava 的使用入门
    RecyclerView 介绍 02 – 重要概念
    AndroidTips:selector的disable状态为什么无效?
    AndroidTips:解决Dialog全屏显示以及Dialog显示自动弹出输入法
    RecyclerView 介绍 01
    python模块-----sqlAlchemy
    python模块-----pyinstaller
    python模块------socket
  • 原文地址:https://www.cnblogs.com/DanielYang11/p/9959962.html
Copyright © 2011-2022 走看看