zoukankan      html  css  js  c++  java
  • python D21 基本模板、time/os/sys

    今日大纲:
    # 1、关于模块
    # import
    # from xxx import xxx
    # 2、Collections
    # 1、Counter 计数器
    # 2、栈:先进后出
    # 队列:先进先出
    # deque:双向队列
    # 3、defaultdict 默认值字典
    # 4、namedtuple命名元组, struct time结构化时间就是命名元组
    # 5、OrederedDict 有序字典。 按照我们存储的顺序保存. 和3.6以后的字典一样的
    # 3、time 时间模块
    # 1、获取系统时间 time.time() 时间戳
    # 2、格式化时间 strftime() 时间格式: %Y-%m-%d %H:%M:%S %Y-%m-%d
    # 3、结构化时间 time.gmtime() time.localtime()
    # strptime() 把格式化时间转化成结构化时间
    # mktime() 把结构化时间转化成时间戳
    # 时间差的计算
    # 一、模块的简单认识
    # 什么是模块,模块就是我们把特定功能代码进行归类的结果,从代码编写单位来看
    # 我们的程序,从小到大的顺序:一条代码 < 语句块 < 代码块(函数、类)< 模块。
    # 我们之前写的所有的py文件都是模块
    # 引入模块的方式:
    # 1、import
    # from xxx improt模块

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

    # 1、Counter
    # counter是一个计算器,主要来计数
    # 计算一个字符串中美俄字符出现的次数:
    # from collections import Counter
    # # low:
    # s = "alex like pig"
    # dic = {}
    # for c in s:
    # dic[c] = dic.get(c, 0) + 1
    # print(dic) # {'a': 1, 'l': 2, 'e': 2, 'x': 1, ' ': 2, 'i': 2, 'k': 1, 'p': 1, 'g': 1}
    #
    # # nb:
    # s = "alex like pig"
    # print(Counter(s)) # Counter({'l': 2, 'e': 2, ' ': 2, 'i': 2, 'a': 1, 'x': 1, 'k': 1, 'p': 1, 'g': 1}) # 获取到的结果可以像字典⼀样进⾏使⽤ [key]

    # 2、deque双向队列
    # 先了解两种数据结构:1.栈 2.队列
    # 1、栈:FILO先进后出 ->砌墙的砖头,做馒头
    # 2、对列:FIFO 先进先出-> 买火车票排队,所有排队的场景
    # python中没有栈、自定义栈(粗略版本)
    class StockEmptyError(Exception): # 自定义异常
        pass
    class StackFullError(Exception):
        pass
    class Stack:  # 定义一个类(简易的栈)
        def __init__(self, size):
            self.size = size
            self.index = 0
            self.lst = []
    
        def push(self, items):
            self.index += 1
            if self.index <= self.size:
                self.lst.append(items)
            else:
                raise StockEmptyError("装满了")
    
        def pop(self):
            self.index -= 1
            if self.index >= 0:
                self.lst.pop()
            else:
                raise StackFullError("拿完了")
    
    s = Stack(5)
    s.push("一号")
    s.push("2号")
    s.push("3号")
    s.push("4号")
    s.push("5号")
    # s.push("6号")  # 超过报错
    # s.push("7号")
    
    s.pop()
    s.pop()
    s.pop()
    s.pop()
    s.pop()
    s.pop() # 拿完了
    # 队列:python提供了queue模板,使用起来非常方便
    # import queue # 引入模块 创建队列
    # dui = queue.Queue() # 固定搭配 创建队列
    # dui.put("剑圣") # put() 往队列里放东西
    # dui.put("微恩")
    # dui.put("小丑")
    # dui.put("赵信")

    # print(dui.get()) # get()往队列里拿东西
    # print(dui.get())
    # print(dui.get())
    # print(dui.get())
    # # print(dui.get()) # 拿完了 程序会阻塞在这里 阻塞:程序没有结束,一直卡在那

    # 双向队列 deque,此队列是collections中的
    # from collections import deque # 从collections模板应用deque(双向队列)
    # x = deque() # 创建双向队列
    # x.append("jay") # 右边加元素
    # x.append("周杰伦")
    #
    # x.appendleft("jj")
    # x.appendleft("林俊杰") # 左边加元素
    #
    # print(x.pop()) # 右边拿元素
    # print(x.popleft()) # 左边拿元素

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

    # from collections import namedtuple # 从collections应用命名元组
    # point = namedtuple("点点", ["x", "y", "z"]) # 里面的参数个数无限制、参数类型无限制
    # p = point(4, 7, 9)
    # print(p) # 点点(x=4, y=7, z=9)
    #
    # point = namedtuple("点点", ["x", "y", "z"])
    # p = point("你好啊", 7, 9)
    # print(p) # 点点(x='你好啊', y=7, z=9)

    # 4、orderdict和defaultdict
    # orderdict 顾名思义,字典key默认是无序的,而OrderedDict是有序的
    # dic = {'a': '娃哈哈', 'b': '薯条', 'c': '胡辣汤'} # 在python3以后的版本中字典显示是有序的,但在底层python底层代码中排列还是无序的
    # print(dic)
    # from collections import OrderedDict
    # od = OrderedDict({'a': '娃哈哈', 'b': '薯条', 'c': '胡辣汤'})
    # print(od)

    # defaultdict:可以给字典设置默认值,当key不存在时,直接获取默认值
    # d = defaultdict(list) # 给字典d设置一个默认值,如果在d中拿不到key,则返回list()
    # print(d["周杰伦"]) # []
    #
    # d = defaultdict(str)
    # print(d["周杰伦"])
    #
    # from collections import defaultdict #调用defaultdict
    # # d = {"周杰伦": "昆凌"} # 字典默认为空字典
    # d = defaultdict(list) # defaultdict 参数必须是可调用的(可调用:表示参数+()能运行)
    # d["周杰伦"] = "昆凌"
    # print(d["周杰伦"]) # 昆凌

    # 三、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秒 这个时间可以被细分为年, ⽉, ⽇.....⼀⼤堆东⻄.
    # 时间戳我们已经⻅过了就是time.time(). ⼀般, 我们不会把这样的时间显⽰给客户. 那
    # 就需要对时间进⾏格式化操作.
    # s = time.strftime("%Y-%m-%d %H:%M:%S") # 2018-11-15 17:41:48 # 必须记住
    # print(s)

    # 日期格式化的标准
    # %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 本地完整星期名称
    # %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 本地完整星期名称

    # 看⼀下结构化时间:
    # 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)
    # 显示当前格式化时间:
    # time_now = time.strftime("%Y-%m-%d %H:%M:%S")

    # while True: # 计时器
    # time_now = time.strftime("%Y-%m-%d %H:%M:%S") # strftime == string fromat time
    # print(time_now)
    # time.sleep(1) #休眠一秒

    # 时间戳->结构化时间->格式化时间
    # t1 = time.time() #2018-11-14 12:23:15 显示当前时间
    # t = time.localtime(1888888)
    # print(t) # 打印结构化时间
    # t2 = time.strftime("%Y-%m-%d %H:%M:%S", t) # 将结构化时间转换成格式化时间
    # print(t2) # 打印格式化时间

    # 格式化时间->结构化时间->时间戳
    # s = "2018-11-4 12:18:56"
    # s1 = time.strptime(s, "%Y-%m-%d %H:%M:%S") # 将格式化时间转化为结构化时间
    # print(s1)
    # s2 = time.mktime(s1) # 将结构化时间转化为时间戳
    # print(s2) #1541305136.0

    # 1、time 模板
    # time.time():显示当前时间
    # time.strftime("%Y-%m-%d %H:%M:%S") # 显示格式化时间/结构化时间转化为格式化时间
    # time.localtime()/time.gmtime()(没有时间差的) # 将时间戳转化为结构化时间 用time.localtime()中国处在东8区会有8小时时差
    # time.strptime() #格式化时间转化为结构时间
    # time.mktime() # 将结构化时间转化为时间戳

    # 四、random模板
    # import random
    # print(random.random()) # 0-1之间的小数
    # print(random.uniform(1, 10)) # 1-10之间的小数
    # print(random.randint(1, 2)) # [1,2]的整数 (前闭后闭区间)
    # print(random.randrange(1, 10, 2)) # 1-10里面的奇数(前闭后开区间)
    # print(random.choice([1, 2, 3, 5, 8, 11, ["烧饼"]])) # 列表随机取出一个元素
    # print(random.sample([1, 2, 3, 5, 8, 11, ["烧饼"]], 2)) # 列表中任意取两个

    # 五. os模块
    # 所有和操作系统相关的内容都在os模块
    # os.makedirs('dirname1/dirname2') 可⽣成多层递归⽬录
    # os.removedirs('dirname1') 若⽬录为空,则删除,并递归到上⼀级⽬录,如若也为空,则删
    # 除,依此类推
    # 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() 属性解读:
    # 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 返回操作系统平台名称


  • 相关阅读:
    20165334 实验一 Java开发环境的熟悉
    20165334 《java程序设计》第5周学习总结
    20165334《java程序设计》第4周学习总结
    20165334《java程序设计》第三周学习总结
    20165334 预备作业3 Linux及学习
    20165334 学习基础与c语言学习心得
    20165228 实验一 Java开发环境的熟悉
    20165228 2017-2018-2 《Java程序设计》第5周学习总结
    20165228 2017-2018-2 《Java程序设计》第4周学习总结
    20165228 2017-2018-2 《Java程序设计》第3周学习总结
  • 原文地址:https://www.cnblogs.com/z520h123/p/9965188.html
Copyright © 2011-2022 走看看