zoukankan      html  css  js  c++  java
  • 模块

    collections模块 :具名元组

    from collections import namedtuple
    point = namedtuple('坐标',['x','y','z'])  # 第二个参数既可以传可迭代对象
    point1 = namedtuple('坐标','x y z')  # 也可以传字符串 但是字符串之间以空格隔开
    p = point(1,2,5)  # 注意元素的个数必须跟namedtuple第二个参数里面的值数量一致
    print(p)
    print(p.x)
    print(p.y)
    print(p.z)

    打印结果

      坐标(x=1, y=2, z=5)
      1
      2
      5

    from collections import namedtuple
    card = namedtuple('扑克牌','color number')
    card1 = namedtuple('扑克牌',['color','number'])
    A = card('','A')
    print(A)
    print(A.color)
    print(A.number)
    打印结果

      扑克牌(color='♠', number='A')
      ♠
      A

    deque模块:双端队列

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

    import queue
    q = queue.Queue()  # 生成队列对象
    q.put('first')  # 往队列中添加值
    q.put('second')
    q.put('third')
    
    print(q.get())  # 朝队列要值
    print(q.get())
    print(q.get())
    print(q.get())  # 如果队列中的值取完了 程序会在原地等待 直到从队列中拿到值才停止

    打印结果
    first
    second
    third

    双端队列:可以从两边插值,也可以从两边拿值

    append:增加值

    appendleft:从左边增加值

    pop:删除值

    popleft:删除最左边的值

    from collections import deque
    q = deque(['a','b','c'])  #创建一个双端队列
    q.append(1)     #在最后增加一个值1
    q.appendleft(2)   #在开头增加一个值2
    print(q)
    print(q.pop())
    print(q.popleft())
    print(q)
    
    打印结果
    deque([2, 'a', 'b', 'c', 1])
    1
    2
    deque(['a', 'b', 'c'])

    OrderdDict:有序字典

    from collections import OrderedDict
    
    order_d1 = OrderedDict()  #生成一个有序字典
    order_d1['x'] = 1   #赋值
    order_d1['y'] = 2
    order_d1['z'] = 3
    print(order_d1)
    for i in order_d1:
        print(i)
    
    有序字典的结果永远都是有序的
    
    打印结果
    x
    y
    z

    deafultdict:默认值字典 (创建一个键值对,就动态创建一个列表,并且列表不是同一个列表,改一个列表不会影响到另一个列表)

      

    values = [11, 22, 33,44,55,66,77,88,99,90]
    
    my_dict = defaultdict(list)  # 后续该字典中新建的key对应的value默认就是列表
    for value in  values:
        if value>66:
            my_dict['k1'].append(value)   # k1为键,大于66的为k1的value
    else: my_dict['k2'].append(value) # k2为键,小于66的为k2的value
    print(my_dict)

    Counter:次数

    from collections import Counter
    s = 'aghdjgadjghfsdjgfjhgsf'
    res = Counter(s)
    print(res)

    # 打印结果
    Counter({'g': 5, 'j': 4, 'h': 3, 'd': 3, 'f': 3, 'a': 2, 's': 2})

    time:时间模块

    三种表现形式

      1.时间戳

      2.格式化时间

      3.结构化时间

    时间戳

    import time
    print(time.time())  时间戳,从1970年1月1日0时0分开始计算秒数
    
    打印结果
    1563442664.6699104

    格式化时间

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

    结构化时间

    import time
    print(time.localtime())

    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表示周一

    计算时间

    # 日期对象 = 日起对象 +/- timedalta对象
    # timedelta对象 = 日期对象 +/- 日期对象
    current_time = datetime.date.today()  # 日期对象
    timetel_t = datetime.timedelta(days=7)  # timedelta对象
    res1 = current_time+timetel_t  # 日期对象

    random模块:随机

    import random
    print(random.randint(1, 10))  # 随机取一个你提供的整数范围内的数字,包含首尾
    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)

    小示例:

    随机生成一个验证码

    def get(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(6)
    print(res)

    os模块:跟操作系统打交道的模块

    import os
    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir(
    "dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..') 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.sep 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/" os.linesep 输出当前平台使用的行终止符,win下为" ",Linux下为" " os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' os.system("bash command") 运行shell命令,直接显示 os.environ 获取系统环境变量 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的大小

    sys模块:跟pycharm解释器打交道的模块

    sys.path.append()  #将某个路径添加到系统的环境变量中
    
    print(sys.version)  #查看python解释器的版本
    print(sys.argv) #命令行启动文件,可以做身份的验证,在程序启动之前

    使用sys.argv做身份验证

    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('用户不存在 无法执行当前文件')

    json、pickle模块:序列化模块

    序列化:

      序列:字符串

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

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

    写入文件的数据必须是字符串

    基于网络传输的数据必须是二进制

    json和pickle模块的用法是一样的,为什么会分为两个模块呢?它们之间究竟有什么区别?

    json模块

      所有的语言都支持

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

    pickle模块

      只支持python语言

      python所有的数据类型都支持

    dumps序列化、loads反序列化示例:

    import json
    
    d = {'name':'zhangsan'} 
    res = json.dumps(d)    #json格式的字符串 必须是双引号 >>>: '{"name": "jason"}'
    print(res, type(res))
    res1 = json.loads(res)
    print(res1, type(res1))
    
    打印结果
    {"name": "zhangsan"} <class 'str'>
    {'name': 'zhangsan'} <class 'dict'>

    dump序列化、load反序列化示例:

    import json
    
    d = {'name':'zhangsan'}
    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))

    我们上述看到了json的序列化和反序列化一个字典,那多个字典我们应该怎么传呢?示例:

    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))
    t = (1,2,3,4)
    print(json.dumps(t))
    
    
    d1 = {'name':'张三'}
    print(json.dumps(d1,ensure_ascii=False))  #ensure_ascii=False  不做任何的转码


    打印结果

      {'name': 'lisi'} <class 'dict'>
      {'name': 'lisi'} <class 'dict'>
      [1, 2, 3, 4]
      {"name": "张三"}

     

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

    import pickle
    d = {'name':'jason'}
    res = pickle.dumps(d)  # 将对象直接转成二进制
    print(res)
    res1 = pickle.loads(res)
    print(res1,type(res1))
    
    打印结果
    b'x80x03}qx00Xx04x00x00x00nameqx01Xx05x00x00x00jasonqx02s.'
    {'name': 'jason'} <class 'dict'>

    操作文件

    import pickle
    d = {'name':'zhangsan'}
    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))

    打印结果
    {'name': 'zhangsan'} <class 'dict'>

    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('正确命令返回的结果stdout',obj.stdout.read().decode('gbk'))
        print('错误命令返回的提示信息stderr',obj.stderr.read().decode('gbk'))
  • 相关阅读:
    [LeetCode]题解(python):094-Binary Tree Inorder Traversal
    [LeetCode]题解(python):093-Restore IP Addresses
    [LeetCode]题解(python):092-Reverse Linked List II
    [LeetCode]题解(python):091-Decode Ways
    第二阶段团队冲刺1
    进度总结报告十三
    梦断代码阅读笔记02
    第一阶段对各组的意见评价
    进度总结报告十二
    软件开发冲刺10
  • 原文地址:https://www.cnblogs.com/chengzige/p/11209351.html
Copyright © 2011-2022 走看看