zoukankan      html  css  js  c++  java
  • python day21常用模块

    ⼀. 模块的简单认识
    什么是模块. 模块就是我们把装有特定功能的代码进行归类的结果. 从代码编写的单位来看我们的程序, 从小到大的顺序: 一条代码 < 语句块 < 代码块(函数, 类) < 模块. 我们目前写的所有的py文件都是模块.

     

    引入模块的⽅方式:
      1. import 模块
      2. from xxx import 模块

    二.collection模块

    collections模块主要封装了了⼀一些关于集合类的相关操作,还提供了⼀些除了基本数据类型以外的数据集合类型. Counter, deque, OrderDict, defaultdict以及namedtuple.

    1.Counter

    Counter是一个计数器,主要用来计数.

    # 计算一个字符中每个字符出现的次数:
    #方法一
    s = "ccj like pig"
    dic={}
    for c in s:
        dic[c]=dic.setdefault(c,0)+1
    print(dic) 
    #{'c': 2, 'j': 1, ' ': 2, 'l': 1, 'i': 2, 'k': 1, 'e': 1, 'p': 1, 'g': 1}
    
    #方法二(Counter):
    from collections import Counter
    print(Counter(s)) 
    #Counter({'c': 2, ' ': 2, 'i': 2, 'j': 1, 'l': 1, 'k': 1, 'e': 1, 'p': 1, 'g': 1})

     

    2.deque双向队列.

    先了解两种数据结构:

      1.栈 : FILO. 取数据时 会''先进后出''.(砌墙后取砖头)

      2.队列 :  FILO.取数据时 会''先进先出''. (类似排队)

    # 队列: python提供了queue模块. 使用起来非常方便
    import queue
    q = queue.Queue()
    q.put("")
    q.put("")
    q.put("")
    
    print(q.get())
    print(q.get())
    print(q.get())
    print(q.get()) #这里无数据可取
    # 注意. 如果队列里没有元素了. 再也拿不出来元素了,此时程序会阻塞.

     

     

    deque, 注意, 此队列是collections中的.

    from collections import deque
    q = deque()
    q.append("张开") # 右侧添加
    q.append("贝尔")
    q.appendleft("赵廷") # 左侧添加
    q.appendleft("高圆")
    print(q)              #deque(['高圆', '赵廷', '张开', '贝尔'])
    print(q.pop())     #贝尔   #右侧删除
    print(q.popleft()) #高圆    #左侧删除

     

     

    3. namedtuple 命名元组

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

    from collections import namedtuple
    # 自己定义了一个元组, 这其实就是创建了一个类
    nt = namedtuple("point", ["x", "y"])
    p = nt(1, 2)
    print(p)  #point(x=1, y=2)
    print(p.x)# 1
    print(p.y)   # 2

     

     

    4.defaultdict

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

    from collections import defaultdict
    dd = defaultdict(list) # 默认值list
    print(dd['哈哈']) # [ ] 当key不存在的时候. 会自动执行构造方法中传递的内容.

     

    lst =[11,22,33,44,55,66,77,88]
    d=defaultdict(list)   #创建一个字典,默认字典里是列表
    for el in lst:
        if el <66:
            d['K1'].append(el)  #字典里Key不存在,则取默认值空列表[], dic['key]会创建key.
        else:
            d['K2'].append(el)
    print(d)  
    #defaultdict(<class 'list'>, {'K1': [11, 22, 33, 44, 55], 'K2': [66, 77, 88]})

     

     

    三. 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(). ⼀般, 我们不会把这样的时间显示给客户,那就需要对时间进行格式化操作.

    import time
    shijian = time.strftime("%Y-%m-%d %H:%M:%S") 
    print(shijian) # 2018-11-14 19:27: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   当前时区的名称
    %%   %号本身

     

    时间格式的转换:

    时间戳 转 格式化时间, 需要先转成结构化时间再转格式化时间.

    格式化时间 转 时间戳时间,需要先转成结构化时间再转时间戳时间.

    也就是说都得通过结构化时间来转化.

    #当前结构化时间
    import time
    print(time.localtime())
    #结果: time.struct_time(tm_year=2018, tm_mon=11, tm_mday=14, tm_hour=19, tm_min=38, tm_sec=36, tm_wday=2, tm_yday=318, tm_isdst=0)

     

     

     比如. 我们的数据库中存储了这样⼀个时间: 1888888888. 如何显示成xxxx年xx月xx⽇?

    import time
    # 时间戳:1888888888
    shijianchuo=1888888888  #时间戳为1888888888
    t_jiegou=time.localtime(shijianchuo) #先为转结构化时间
    print(t_jiegou)  #time.struct_time(tm_year=2029, tm_mon=11, tm_mday=9, tm_hour=11, tm_min=21, tm_sec=28, tm_wday=4, tm_yday=313, tm_isdst=0)
    
    t_geshi=time.strftime('%Y-%m%-%d %H:%M:%S',t_jiegou) #再转格式化时间 (XXXX年-XX月-XX日 XX时:XX分:XX秒)
    print(t_geshi) #打印出格式化后的时间  2029-11-09 11:21:28

    格式化时间再转回时间戳:

    #格式化时间转时间戳
    s2='2029-11-09 11:21:28' # 格式化时间其实就是字符串格式
    t_jiegou=time.strptime(s2,'%Y-%m-%d %H:%M:%S') #把格式化时间转成结构化时间
    t_shijian=time.mktime(t_jiegou) #得到结构化时间,再转成时间戳
    print(t_shijian) # 1888888888.0  一般带小数.0

     

     

    四. random模块

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

    import random
    print(random.randint(1,3))  #1,2,3随机抽选一个
    print(random.random())  # 随机 (0,1)中的小数
    print(random.uniform(3,10)) #(3,10)随机小数
    
    print(random.choice(['1','2','3','4'])) #随机选择其中一个
    print(random.sample(['1','2','[34]','SB'],2)) #随机两个 ['2', '[34]']
    
    lst=['1','2','[34]','SS']
    random.shuffle(lst) #打乱顺序 ['[34]', '2', 'SS', '1']
    print(lst)

    五. 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'

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

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

     

  • 相关阅读:
    [翻译角]Headline English: A Captain Should Be Pitch Perfect at a Multitude of Skills (ESLPOD Blog)
    CF735D Taxes 哥德巴赫猜想判定素数 进一步猜想
    CF735C 数论平衡树叶子节点的最大深度贪心斐波那契条件归一化
    萌新的旅行&hdu5681单调队列的应用前缀和线段树ST表倍增解法
    CF731C Socks并查集(森林),连边,贪心,森林遍历方式,动态开点释放内存
    玲珑杯1007-A 八进制大数加法(实现逻辑陷阱与题目套路)
    关于石子合并
    codeforces724-B. Batch Sort
    codeforces724-A. Checking the Calendar 日期题
    如何筛选人
  • 原文地址:https://www.cnblogs.com/chcj/p/9960113.html
Copyright © 2011-2022 走看看