zoukankan      html  css  js  c++  java
  • 第二十一天- 基本模块

    # 模块:模块就是我们把装有特定功能的代码进⾏归类的结果
    # 目前写的所有的py⽂件都是模块

    # 引入方式:
    # 1.import 模块
    # 2.from xxx import 模块
    # 目前都是用的python内置模块 后面高级框架时需要额外安装第三方模块


    # collections模块:
    # 1.Counter 计数器 计数
     1 from collections import Counter
     2 
     3 s = "狗咬我一口,难道我还要去咬狗?"
     4 # dic = {}
     5 # for el in s:
     6 #     dic[el] = dic.setdefault(el,0) + 1
     7 # print(dic)
     8 
     9 c = Counter(s)  # 获取到的结果可像字典一样使用
    10 # print("__iter__"in dir(c))
    11 print(c)
    12 # for k in c:
    13 #     print(k, c[k])
    # 2.双向队列
    # 数据结构: 栈 先进后出 队列 先进先出
     1 # python中提供了列队 没有栈 自己写一个栈
     2 class StackFullError(Exception):
     3     pass
     4 class StackEmptyError(Exception):
     5     pass
     6 
     7 class Stack:
     8     def __init__(self, size):
     9         self.index = 0 #  栈顶指针
    10         self.lst = []
    11         self.size = size
    12 
    13     # 给栈添加元素
    14     def push(self, item):
    15         if self.index == self.size:
    16             # 栈已经满了. 不能再装东西了
    17             raise StackFullError('the stack is full')
    18         self.lst.insert(self.index, item) # 对于空列表. 需要insert插入内容
    19         # self.lst[self.index] = item # 把元素放到栈里
    20         self.index += 1     # 栈顶指针向上移动
    21 
    22     # 从栈中获取数据
    23     def pop(self):
    24         if self.index == 0:
    25             raise StackEmptyError("the stack is empty")
    26         self.index -=1 # 指针向下移动
    27         item = self.lst.pop(self.index) # 获取元素. 删除.
    28         return item
    29 
    30 # s = Stack(5)
    31 # s.push("馒头1号")
    32 # s.push("馒头2号")
    33 # s.push("馒头3号")
    34 # s.push("馒头4号")
    35 # s.push("馒头5号")
    36 #
    37 # print(s.pop())
    38 # print(s.pop())
    39 # print(s.pop())
    40 # print(s.pop())
    41 # print(s.pop())
    42 #
    43 #
    44 # lst = []
    45 # lst.append("哈哈1")
    46 # lst.append("哈哈2")
    47 # lst.append("哈哈3")
    48 # lst.append("哈哈4")
    49 #
    50 # print(lst.pop())
    51 # print(lst.pop())
    52 # print(lst.pop())
    53 # print(lst.pop())
    View Code
    # 队列  先进先出
    # python提供了queue模块. 直接用
     1 import queue
     2 
     3 q = queue.Queue()
     4 q.put("林俊杰")
     5 q.put("王力宏")
     6 q.put("周杰伦")
     7 q.put("陈道明")
     8 
     9 # print(q.get())
    10 # print(q.get())
    11 # print(q.get())
    12 # print(q.get())
    13 #
    14 # # print(q.get()) # 若队伍里没有元素了, 继续获取 会阻塞
    15 # input() # 也会阻塞 输入等待 enter就能结束
    16 # print("没有了。。。")
    View Code
    # deque 注意,此列队是collection中的
     1 from collections import deque
     2 
     3 q = deque()
     4 
     5 q.append("刘亦菲")
     6 q.append("江疏影")
     7 q.appendleft("杨幂")
     8 q.appendleft("胡歌")
     9 
    10 # print(q.pop())  # 从右边拿
    11 # print(q.pop())
    12 # print(q.popleft())  # 从左边拿
    13 # print(q.popleft())
    14 
    15 # print(q.pop())  # 若队伍里没有元素了 会报错
    # 3.namedtuple  命名元祖
     1 from collections import namedtuple
     2 
     3 point = namedtuple("",["x","y","z"])  # 等同一个只有属性的类
     4 # class point:
     5 #     def __init__(self,x,y,z):
     6 #         self.x = x
     7 #         self.y = y
     8 #         self.z = z
     9 
    10 p = point(5,6,7)
    11 print(p.x)
    12 print(p.y)
    13 print(p.z)
    14 
    15 print(p)
    16 p.x = 21  # 报错 不可改 终归是一个元祖
    # 4.defaultdict
    # 可以给字典设置默认值. 当key不存在时. 直接获取默认值:
     1 from collections import   defaultdict
     2 
     3 lst = [11,22,33,44,55,66]
     4 d = defaultdict(list)
     5 for el in lst:
     6     if el <22:
     7         d['key1'].append(el)  # key1默认是不存在的. 但是可以拿key1. 一个空列表.
     8     else:
     9         d["key2"].append(el)
    10 
    11 print(d)
    # 5.orderdict
    # orderdict 字典默认无序 OrderedDict是有序的
    1  dic = {'a':'娃哈哈', 'b':'薯条', 'c':'胡辣汤'}
    2  print(dic)
    3  from collections import OrderedDict
    4  od = OrderedDict({'a':'娃哈哈', 'b':'薯条', 'c':'胡辣汤'})
    5  print(od)
    # 时间模块
    # 获取当前系统时间, 时间戳
    # print(time.time()) # 1542166230.6139991, 给机器看的, 以1970-01-01 00:00:00为起点
    # 格式化时间
    1 import time
    2 # 获取当前时间
    3 s = time.strftime("%Y-%m-%d %H:%M:%S")
    4 print(s)  # 2018-11-14 11:47:29
    # 应用-计时器
    1 time.sleep(5) # 睡 到点起床  类似的 wait() -> notify()
    2 
    3 while 1:
    4     s = time.strftime("%Y-%m-%d %H:%M:%S")
    5     print(s)
    6     time.sleep(1)
    # 时间戳 -> 格式化时间
    1 import time
    2 t = time.localtime(31999999999)  # localtime 本地时间   gmtime() 格林尼治时间  时差
    3 print(t)
    4 str_time = time.strftime("%Y-%m-%d %H:%M:%S",t)
    5 print(str_time)
    # 格式化时间 -> 时间戳
    1 s = "2984-01-15 16:53:19"
    2 # 先结构化时间
    3 t = time.strptime(s,"%Y-%m-%d %H:%M:%S")  # 注意:要转化的格式是什么 结构化时就是什么
    4 print(t)
    5 ss = time.mktime(t)
    6 print(ss)
    # 注:结构化时间实际上就是一个命名元祖 如:
    1 t = time.localtime()
    2 # print(t)  # time.struct_time(tm_year=2018, tm_mon=11, tm_mday=14, tm_hour=20, tm_min=46, tm_sec=45, tm_wday=2, tm_yday=318, tm_isdst=0)
    3 # 实际在程序里是(2018, 11, 14, 20, 46, 45, 2, 318, 0)
    # 时间差计算
     1 import time
     2 
     3 time_now = time.strptime("2018-11-14 15:07:08","%Y-%m-%d %H:%M:%S")
     4 time_old = time.strptime("2017-12-25 18:07:22","%Y-%m-%d %H:%M:%S")
     5 diff_cha = time.mktime(time_now) - time.mktime(time_old)  # 先转换成时间戳
     6 # 方案一
     7 re = time.gmtime(diff_cha)  # 结构化时间
     8 re1 = time.strftime("%Y-%m-%d %H:%M:%S",re) # 格式化时间
     9 # 注意默认时间1970-01-01,要减去。
    10 print("相差%s年%s月%s天%s小时%s分钟%s秒"%(re.tm_year - 1970,re.tm_mon - 1,re.tm_mday - 1,re.tm_hour,re.tm_min,re.tm_sec))
    11 
    12 # 方案二
    13 diff_min = int(diff_cha//60)  # 转化成分
    14 # print(diff_min)
    15 diff_hour = int(diff_min // 60)  # 转换成小时
    16 # print(diff_hour)
    17 diff_day = int(diff_hour // 24)  # 转换成天
    18 # print(diff_day)
    19 
    20 diff_sec = int(diff_cha % 60)
    21 # print(diff_sec)  # 剩下的秒  46
    22 
    23 diff_min1 = diff_min % 60
    24 # print(diff_min1)  # 剩下的分  59
    25 
    26 diff_hour1 = diff_hour % 24
    27 # print(diff_hour1)  # 剩下的小时  20
    28 
    29 print("时间差是%s天%s小时%s分%s秒"%(diff_day,diff_hour1,diff_min1,diff_sec))
    View Code
    # random模块
     1 import random
     2 
     3 print(random.random())  # (0,1)之间的随机小数
     4 print(random.randint(1,10))  # [1,10] 闭区间 随机整数
     5 print(random.uniform(3,10))  # (3,10)之间的随机小数
     6 
     7 print(random.randrange(1,10,2))  # [1,10) 切片 随机每两个取一个
     8 
     9 print(random.choice([1,'李荣浩','周杰伦',['胡辣汤','疙瘩汤']])) # 随机取一个
    10 print(random.sample([1,'23',[4,5]],2))  # 列表元素任意两个组合
    11 
    12 lst = [1,2,3,4,5,6,7,8,9]
    13 random.shuffle(lst)  # 随机打乱顺序
    14 print(lst)
    # os模块
    # 和系统操作相关的内容
     1 import os
     2 
     3 os.makedirs('dirname1/dirname2')  # 创建文件夹目录结构
     4 os.removedirs('哈啊哈') # 删除文件夹,如果文件夹内没有东西,可以删除,否则报错
     5 
     6 os.mkdir('dirname/哈哈')  # 生成单级目录 若父级目录不存在会报错
     7 os.rmdir('dirname') # 删除单级文件夹 若不是空的 报错  inError 145] 目录不是空的。: 'dirname'
     8 
     9 print(os.listdir('../'))  # 递归 列出指定⽬录下的所有⽂件和⼦⽬录,包括隐藏⽂件,并以列表⽅式打印
    10 
    11 os.remove('xxx')  # 删除一个文件
    12 os.rename('oldname','newname')  # 重命名文件/目录
    13 
    14 
    15 os.stat('dirname')  # 获取文件信息 linux常用
    16 # stat() 属性解读
    17 # stat 结构:
    18 # st_mode: inode 保护模式
    19 # st_ino: inode 节点号。
    20 # st_dev: inode 驻留的设备。
    21 # st_nlink: inode 的链接数。
    22 # st_uid: 所有者的⽤户ID。
    23 # st_gid: 所有者的组ID。
    24 # st_size: 普通⽂件以字节为单位的⼤⼩;包含等待某些特殊⽂件的数据。
    25 # st_atime: 上次访问的时间。
    26 # st_mtime: 最后⼀次修改的时间。
    27 # st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在
    28 # 其它系统上(如Windows)是创建时间。
    View Code
    1 import os
    2 
    3 # os.system("dir")  # 模拟命令行 直接执行命令
    4 # s = os.popen('dir').read()  # 运⾏shell命令,获取执⾏结果
    5 # print(s)
    6 
    7 # print(os.getcwd())  # 获取当前程序的目录
    8 # os.chdir()  # 更改程序工作目录 相当于 linux  cd
    View Code
    # path相关
     1 # path相关
     2 import os
     3 print(os.path.abspath('dirname'))  # 获取绝对路径
     4 print(os.path.split('E:Python_workspaceday021- 基本模块1dirname'))  # 拆分路径
     5 print(os.path.dirname('E:Python_workspaceday021- 基本模块1dirname'))  # 返回上面拆分的第一个元素
     6 print(os.path.basename('E:Python_workspaceday021- 基本模块1dirname'))  # 即返回上面拆分第二个元素
     7 
     8 print(os.path.exists('E:Python_workspaceday021- 基本模块1dirname'))  # 看文件是否存在 存在True 不存在 False
     9 print(os.path.isabs('xxx'))  # 判断是否是绝对路径
    10 
    11 print(os.path.isfile('xxx'))  # 判断是否文件
    12 print(os.path.isdir('xxx'))  # 判断是否文件夹
    13 
    14 print(os.path.join('path1[, path2[, ...]]'))  # 拼接路径
    15 print(os.path.getatime('xxx'))  # 文件或目录最后访问时间
    16 print(os.path.getmtime('xxx'))  # 文件或目录最后修改时间
    17 print(os.path.getsize('xxx'))  # 返回 xxx 的大小
    View Code
    # 特殊属性
    1 print(os.sep)  # 文件分隔符 \  /  windows \  linux / (重要)
    2 print('c:'+os.sep+'王尼玛')  # 这样写多平台可用
    3 #
    4 # os.linesep  # 输出当前平台使⽤的⾏终⽌符,win下为"
    ",Linux下为"
    "
    5 # os.pathsep  # 输出⽤于分割⽂件路径的字符串 win下为; ,Linux下为:  (陪环境变量时用到)
    6 
    7 print(os.name)  # 输出字符串指示当前使⽤平台。win->'nt'; Linux->'posix' 判断用户使用系统
    # sys模块
    # 所有和python解释器相关的都在sys模块
     1 import sys
     2 
     3 print(sys.argv)  # 命令⾏参数List,第⼀个元素是程序本身路径(不常用)
     4 
     5 # sys.exit(0)  # 退出 类似 exit()  0正常退出 非0不正常
     6 print(sys.version)  # 获取Python解释器版本详细信息
     7 print(sys.platform)  # 返回操作系统平台名称
     8 
     9 
    10 print(sys.path)  # 搜索模块的路径
    11 # sys.path.append("E:/")  # 若master不在sys的搜索路径里可 .append('路径') 添加到sys 一样可调用
    12 import master  # master文件放在同目录 是sys.path搜索的第一个元素 所有可调用
    13 master.chi()  # 胖虎很能吃


  • 相关阅读:
    服务器性能测试实时监控Linux命令
    软件性能测试中的关键指标
    递归静态路由和直连静态路由
    FIB表与RIB表的区别与联系
    FIB表中 Next Hop 的几种状态码(drop/receive/attached/no route)的含义
    Leetcode 与树(TreeNode )相关的题解测试工具函数总结
    centos 7.6 docker 安装 nextcloud -使用sqlite数据库
    看守所收押流程
    qt编译oracle驱动,qt 5.12 连接 oracle 数据库示例代码
    centos 7.6 安装配置nginx (显示中文目录,带密码验证)
  • 原文地址:https://www.cnblogs.com/xi1419/p/9960821.html
Copyright © 2011-2022 走看看