• 模块学习


    一.  collections模块 

    collections模块提供了几个额外的数据类型:namedtuple、deque、Counter、OrderedDict和defaultdict等

    1.namedtuple:具名元组

    from collections import namedtuple
    
    point = namedtuple("point","x y z")
    #  第二个参数也可以是字符串,字符串之间以空格隔开
    point = namedtuple("point", ['x','y','z'])
    #  第二个参数可以是可迭代对象
    p = point(1,2,3)
    # 元素的个数必须和第二个参数里的数量一样
    print(p)
    print(p.x ,p.y ,p.z)
    
    card = namedtuple("扑克牌", "color number")
    A= card("", 'K')
    print(A)
    print(A.color,A.number)
    View Code

    2.deque模块:双端队列

    队列是先进先出(FIFO:first in first out)

    queue队列:

    import queue
    
    q = queue.Queue() # 生成队列
    
    q.put('first') # 向队列添加元素
    q.put("second")
    q.put("third")
    
    print(q.get())# 获取队列元素
    print(q.get())
    print(q.get())# 队列元素为空,程序会原地等待,直到拿到值为止
    View Code

    deque 双端队列:

    from collections import deque
    
    q = deque ("abc")  # deque括号内的应该是个可迭代对象,会自动把字符串转换成列表
    q.appendleft("zxc") # 左添加
    q.append("ppp")  # 右边添加
    q.insert(2,"666") # 特殊点:双端队列可以根据索引在任意位置插值
    print(q.pop()) # 右边取出
    print(q.popleft()) #左边取出
    print(q.popleft())
    print(q.popleft())
    View Code

    3.OrderedDict :有序字典

    OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:

    from collections import OrderedDict
    
    order_d = OrderedDict([('a',1),('b',2),('c',3)])
    # 生成一个有序字典并赋值
    order_d1 = OrderedDict() # 生成有序字典
    order_d1['x'] = 1 # 按key赋值
    order_d1['y'] = 2
    order_d1['z'] = 3
    
    for i in order_d1:
        print(i)
    View Code

     

    4. deafultdict: 

    defaultdict的作用:在于当字典里的key不存在但被查找时,返回的是一个默认值

    from collections import defaultdict
    
    values = [11, 22, 33,44,55,66,77,88,99,90]
    
    my_dict = defaultdict(list)  # 后续该字典中新建的key对应的value默认就是列表
    print(my_dict['aaa']) # 当key键不存在时,会自动创建,并且值为空,不会报错
    for value in  values:
        if value>66:
            my_dict['k1'].append(value)
        else:
            my_dict['k2'].append(value)
    print(my_dict)
    
    my_dict1 = defaultdict(int) # 括号里是value的类型,默认为空
    print(my_dict1['xxx'])
    
    my_dict2 = defaultdict(bool)# 括号里是value的类型,默认为空
    print(my_dict2['kkk'])
    
    my_dict3 = defaultdict(tuple) # 括号里是value的类型,默认为空
    print(my_dict3['mmm'])
    View Code

    5.Counter

      Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。 

    from collections import Counter
    
    s = 'abcqwerqrdeabcdabcaba'
    
    print(Counter(s))
    View Code

    二.时间模块

    1.time模块

    三种表现形式

      1.时间戳

      2.格式化时间

      3.结构化时间

    时间戳

    import time
    print(time.time())  时间戳,从1970年1月1日0时0分开始计算秒数
    View Code

    格式化时间

    import time
    
    查看当前时间
    print(time.strftime('%Y-%m-%d %H:%M:%S'))
    print(time.strftime('%Y-%m-%d %X'))    #%X等价于%H:%M:%S    
    View Code

    结构化时间

    import time
    print(time.localtime())
    View Code

    几种格式之间的转换

    2.datatime模块

    import datetime
    print(datetime.date.today())  # 查看当前时间,年月日
    print(datetime.datetime.today())  #查看当前时间,年月日时分秒
    print(datetime.datetime.now())   #查看当前时间,年月日时分秒
    res = datetime.datetime.today()
    print(res.year)     #查看哪一年
    print(res.month)     #查看哪个月份
    print(res.day)     #查看哪一天
    print(res.weekday())    #查看周几,0-6表示星期,0表示周一
    print(res.isoweekday())  #查看周几,1-7表示星期, 1表示周一
    View Code
    # timedelta对象 = 日期对象 +/- 日期对象
    current_time = datetime.date.today()  # 日期对象
    timetel_t = datetime.timedelta(days=7)  # timedelta对象
    res1 = current_time+timetel_t  # 日期对象
    View Code

    三.random模块:随机

     

    import random
    
    print(random.randint(1,6))  # 随机取一个你提供的整数范围内的数字  包含首尾
    print(random.random())  # 随机取0-1之间小数
    print(random.choice([1,2,3,4,5,6]))  # 摇号 随机从列表中取一个元素
    res = [1,2,3,4,5,6]
    random.shuffle(res)  # 洗牌
    print(res)
    View Code

    示例:随机生成一个验证码

    def get_code(n):
        code = ''
        for i in range(n):
            # 先生成随机的大写字母 小写字母 数字
            upper_str = chr(random.randint(65,90))
            lower_str = chr(random.randint(97,122))
            random_int = str(random.randint(0,9))
            # 从上面三个中随机选择一个作为随机验证码的某一位
            code += random.choice([upper_str,lower_str,random_int])
        return code
    res = get_code(4)
    print(res)
    View Code

    四.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的大小
    View Code

    五.sys模块

    sys模块是与python解释器交互的一个接口

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

    sys.argv命令行运行

    import sys
    print(sys.argv)  # 命令行启动文件 后面加参数,可以做身份的验证
    if len(sys.argv) <= 1:
        print('请输入用户名和密码')
    else:
        username = sys.argv[1]
        password = sys.argv[2]
        if username == 'jason' and password == '123':
            print('欢迎使用')
            # 当前这个py文件逻辑代码
        else:
            print('用户不存在 无法执行当前文件')
    View Code

    六.序列化模块

    json、pickle模块:序列化模块

      序列:字符串

      序列化:其他数据类型转换成字符串的过程

      反序列化:字符串转成其他数据类型

    写入文件的数据必须是字符串,基于网络传输的数据必须是二进制

    json和pickle模块的用法相同,使用范围不同。

    json模块

      所有的语言都支持,适合跨语言

      支持的数据类型很少(字符串、列表、字典、整形、元组(转成列表)、布尔值)

    pickle模块

      只支持python语言

      python所有的数据类型都支持

    json模块:

    dumps: 序列化 将其他数据类型转成json格式的字符串
    loads: 反序列化 将json格式的字符串转换成其他数据类型

    dump load

    dumps 和loads的使用

    import json
    
    d = {"name":"jason"}
    print(d)
    res = json.dumps(d)  # json格式的字符串 必须是双引号 >>>: '{"name": "jason"}'
    print(res,type(res))
    res1 = json.loads(res)
    print(res1,type(res1))
    View Code

    dump 和load的使用

    import json
    
    d = {"name":"jason"}
    
    with open('userinfo','w',encoding='utf-8') as f:
        json.dump(d,f)  # 装字符串并自动写入文件
    with open('userinfo','r',encoding='utf-8') as f:
        res = json.load(f)
        print(res,type(res))
    View Code

    load不能一次处理多个反序列化

    import json
    with open('userinfo','w',encoding='utf-8') as f:
        json.dump(d,f)  # 装字符串并自动写入文件
        json.dump(d,f)  # 装字符串并自动写入文件
    
    with open('userinfo','r',encoding='utf-8') as f:
        res1 = json.load(f)  # 不能够多次反序列化
        res2 = json.load(f)
        print(res1,type(res1))
        print(res2,type(res2))
    View Code

    处理多个反序列化文件

    import json
    
    d = {
        "name" : "jason"
    }
    
    
    with open('userinfo','w',encoding='utf-8') as f:
        json_str = json.dumps(d)
        json_str1 = json.dumps(d)
        f.write('%s
    '%json_str)
        f.write('%s
    '%json_str1)
    
    
    with open('userinfo','r',encoding='utf-8') as f:
        for line in f:
            res = json.loads(line)
            print(res,type(res))
    View Code

    序列化会把元组转换成列表

    import json
    t = (1,2,3,4)
    print(json.dumps(t))
    View Code

    dumps序列化会默认把中文转成u的16进制,可以通过ensure_ascii取消转换

    import json
    d1 = {'name':'朱志坚'}
    print(json.dumps(d1,ensure_ascii=False))
    View Code

    pickle模块:使用pickle模块做文件操作的时候,必须使用b模式

    dumps 和loads的使用:

    import pickle
    d = {'name':'jason'}
    res = pickle.dumps(d)  # 将对象直接转成二进制
    print(pickle.dumps(d))
    res1 = pickle.loads(res)
    print(res1,type(res1))
    View Code

    dump 和load的使用:

    import pickle
    """
    用pickle操作文件的时候 文件的打开模式必须是b模式
    """
    with open('userinfo_1','wb') as f:
        pickle.dump(d,f)
    
    with open('userinfo_1','rb') as f:
        res = pickle.load(f)
        print(res,type(res))
    View Code

    七.subprocess:子进程模块

    用途:

    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'))
    View Code
  • 相关阅读:
    [原]openstack-kilo--issue(十一)Failed connect to 169.254.169.254:80; No route to host
    [转]pycharm active code
    [原]openstack-kilo--issue(九) heat stacks topology中图形无法正常显示
    [原]CentOS 7 网卡子接口的创建
    [转]Shell中read的常用方式
    [转]输出带颜色的shell
    第十七节:从状态机的角度async和await的实现原理(新)
    第十六节:时隔两年再谈异步及深度剖析async和await(新)
    第十一节:SQLServer事务写法、各种锁、事务隔离级别
    第十七节:SQL中的一些常用SQL积累(持续更新)
  • 原文地址:https://www.cnblogs.com/Cpsyche/p/11210351.html
Copyright © 2020-2023  润新知