zoukankan      html  css  js  c++  java
  • Day 16 常用模块

    1.collections模块:额外数据类型模块

      1:namedtuple(具名元组):有名字的元组,通常用于坐标系,扑克牌

    from collections import namedtuple
    point = namedtuple('坐标',['x','y','z'])  # 第一个参数就是名字,第二个可以传可迭代对象,也可以传字符串,字符串之间需要空格隔开
      # point = namedtuple('坐标','x y z')
    p = point(3,6,9)  # 元素个数必须和namedtuple第二个参数一一对应
    print(p)  # 坐标(x=3, y=6, z=9)
    print(p.x)  # 3
    print(p.y)  # 6
    print(p.z)  # 9
    from collections import namedtuple
    cards = namedtuple('扑克',['color','num'])
    card = cards('','A')
    print(card)
    print(card.color)
    print(card.num)

      2:deque(双端序列): 可以从左右两端插入值和弹出值的队列

    from collections import deque
    l = deque(['a','b','c'])
    l.append(1)  # 默认右侧插入 deque(['a', 'b', 'c', 1])
    print(l)
    l.appendleft(2)  # appendleft方法可以从左边插入 deque([2, 'a', 'b', 'c', 1])
    print(l)
    res = l.pop() # 默认右侧弹出  有返回值
    print(l,'	',res)  # deque([2, 'a', 'b', 'c'])      1
    res1 = l.popleft() # popleft方法左侧弹出有返回值
    print(l,'	',res1)  # deque(['a', 'b', 'c'])      2
    l.insert(1,'d')  # 还支持insert 按索引插入
    print(l)  # deque(['a', 'd', 'b', 'c'])

      3:OrderedDict(有序字典)

    from collections import OrderedDict
    o_d = OrderedDict([('a',1),('b',2),('c',3)])
    print(o_d)  # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    # 在python3中效果不显著.在python2中测试OK.传入什么元素对应顺序的key就是什么

      4:defaultdict(带有默认值字典):类似于dict.fromkeys() 不一样的是当统一的值是列表时.defultdict字典value的值都是不同的内存地址,不会像fromkeys似的,改变一个所有的都改变

    l = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
    from collections import defaultdict
    d = defaultdict(list)  # 创建一个值都会为空列表的字典
    for i in l:
        if i > 66:
            d['k1'].append(i)
        elif i < 66:
            d['k2'].append(i)  # defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55], 'k1': [77, 88, 99, 90]})
    print(d)

      5:Counter(计数器)    返回一个以元素为key,元素个数为value的Counter类字典

    s = 'abcdeabcdabcaba'  # 判断s中每个字符出现的次数
    d = {}
    for i in s:
        if i not in d:
            d[i] = 1
        else:
            d[i] += 1
    print(d)  # {'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}
    from collections import Counter
    s = 'abcdeabcdabcaba'
    res = Counter(s)
    print(res)   # Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

    2.time模块:时间模块3种表现形式..(1)时间戳 (2) 格式化时间  (3) 结构化时间

    import time
    print(time.time())  # 时间戳,距伦敦时间1970.1.1 00:00:00 过去多少秒
    print(time.strftime('%Y-%m-%d %H:%M:%S'))   # 当前时间格式化
    print(time.localtime()) # time.struct_time(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=18, tm_min=8, tm_sec=53,
                            # tm_wday=3, tm_yday=199, tm_isdst=0)
    # 结构化时间
    python中时间日期格式化符号:
    %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 当前时区的名称
    %% %号本身

      三种时间表现形式转化:

    3.datetime模块:时间模块

    import datetime
    print(datetime.date.today())  # date只是年月日  2019-07-18
    print(datetime.datetime.today()) # datetime详细信息 2019-07-18 18:17:30.981757
    res = datetime.datetime.today()
    print(res.year)   # 年 2019
    print(res.month)  # 月 7
    print(res.day)  # 日 18
    print(res.weekday()) # 3(从0开始.0代表周一)
    print(res.isoweekday()) # 4 (1代表周一)
    res = datetime.timedelta(day=7) # datetime.timedelta对象代表两个时间之间的时间差
    时间计算:
    日期对象 = 日期对象 +/- timedelta对象
    timedelta对象 = 日期对象 +/- 日期对象

    4.random模块:随机模块 :

    import random
    print(random.random())   # 0-1之间的随机浮点数,不包括0和1
    print(random.randint(1,6))  # 生成1-6之间的随机整数,包括1和6
    print(random.randrange(1,10,2))  # 从range(1,10,2)之中抽取一个整数
    l = [1, 3, 334, 436, 636, 1231]
    print(random.choice(l))  # 随机抽取列表里的一个元素
    random.shuffle(l)   # 原地打乱列表里元素的顺序 
    print(l)
    print(random.sample(l,2))  # 随机抽取列表里的2个元素,不可能出现两个一样的
    # 随机生成N位字母数字组成验证码的函数
    import random
    def func(n):   # n生成多少位的
        code = ''
        for i in range(n):  
            num = str(random.randint(0,9))  # 生成0-9的数字,为了拼接转为字符串
            upper_pha = chr(random.randint(65,90))  # 根据ascii码表转为对应的大写字母
            lower_pha = chr(random.randint(97,122))  # 根据ascii码表转为对应的小写字母
            code += random.choice([num, upper_pha, lower_pha])  # 字符串拼接,保证字母数字生成的几率一样
        return code
    
    
    print(func(6))

    5.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的大小

    6.sys模块: python解释器模块

    sys.exit(n)        退出程序,正常退出时exit(0),错误退出sys.exit(1)
    sys.version        获取Python解释程序的版本信息
    sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    sys.platform       返回操作系统平台名称

    sys.argv: 命令行参数List,第一个元素是程序本身路径,可以设置权限

    # 在命令行使用 针对管理员或测试
    if len(sys.argv) <= 1:
        print('请输入用户名和密码')
    else:
        username = sys.argv[1]
        password = sys.argv[2]
        if username == 'name' and password == 'pwd':
            print('欢迎使用')      
        else:
            print('用户不存在 无法执行当前文件')

    7.json模块,pickle模块:序列化模块:由于写入文件的数据必须是字符串,网络传输的数据是二进制所以必须用到序列化和反序列化

      序列化就是将其他数据类型转成字符串的过程

      反序列化就是将字符串转成其他数据类型的过程

    json 与 pickle的区别:

      json:所有语言都支持json格式, 单json支持的数据类型少 有字符串,列表字典.整形,布尔值,元组 其中元组会转化为列表,json格式字符串必须是双引号  

      dumps: 序列化

    import json
    d = {'name':18}
    res = json.dumps(d)
    print(res,type(res))  # {"name": 18} <class 'str'>

      loads:反序列化

    import json
    d = {'name':18}
    res = json.dumps(d)
    print(res,type(res))  # {"name": 18} <class 'str'>
    res1 = json.loads(res)
    print(res1,type(res1))  # {'name': 18} <class 'dict'>

      dump: 序列化  与 dumps结果一致.但针对的是文件句柄,用于写入文件

      load:反序列化  与 load结果一致.但针对的是文件句柄 用于读文件

      pickle :方法与json中方法一致只支持python 他对python的左右数据类型都支持   用pickle模块操作文件时文件打开模式必须是b模式

    8.subprosess模块:子进程模块

    1.用户通过网络连接上了你的这台电脑
    2.用户输入相应的命令 基于网络发送给了你这台电脑上某个程序
    3.获取用户命令 里面subprocess执行该用户命令
    4.将执行结果再基于网络发送给用户
    这样就实现 用户远程操作你这台电脑的操作

    # 示范
    while True:
        cmd = input('cmd>>>:').strip()
        import subprocess
        obj = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
        # print(obj)
        print('正确命令返回的结果stdout',obj.stdout.read().decode('gbk'))
        print('错误命令返回的提示信息stderr',obj.stderr.read().decode('gbk'))
  • 相关阅读:
    python学习笔记(五)---sublime text 多行代码注释快捷键
    python学习笔记(四)---python不能输出中文问题
    python学习笔记(三)---python关键字及其用法
    python学习笔记(二)---编辑工具sublimeText3运行python
    python学习笔记(一)---python下载以及环境的安装
    idea上查看本文件svn修改的历史版本
    关于app
    Git 上传文件到 码云 gitee
    Vue 图片引入
    Eslint 规则说明
  • 原文地址:https://www.cnblogs.com/yanglingyao/p/11209693.html
Copyright © 2011-2022 走看看