• 一些模块


    collections模块

    ''''''
    
    # 具名元组
    from collections import namedtuple
    
    # point = namedtuple('坐标',['x','y'])  # 第一个参数传的是对后面元组的描述  第二个参数可以是可迭代对象
    point = namedtuple('坐标', 'x y z')  # 第二个参数可以为字符串,但是每个字符都要用空格隔开
    # point = namedtuple('坐标','xyz')  # 这里没有将字符串字符分隔开,只能穿一个值
    # p = point(2,4)  # 给x,y进行传参,传入值2和4
    p = point(1, 2, 3)  # 坐标(x=1, y=2, z=3)
    # 可以通过p.x 取出出入的值
    
    
    
    
    # 队列(先进先出)
    import queue
    res = queue.Queue()  # 生成队列对象 可以往里面添加值
    res.put('cly')  # 往队列中传值
    res.put('clysb')
    res.put('clydsb')
    
    # 从队列中取值
    print(res.get())
    print(res.get())
    print(res.get())
    print(res.get())  # 当队列中的值取完时,再取,程序会在原地等待,等到取到队列中的值 才会结束
    
    
    
    
    # deque双端队列
    from collections import deque
    
    res = deque([1, 2, 3])
    '''
    # 双端队列需要掌握的方法
    # append appendleft
    # pop    popleft
    # insert
    '''
    res.append('a')  # 在队列右边添加值
    res.appendleft('c')  # 在队列左边添加值
    r = res.pop()  # 从右边弹出值  在括号内添加值时,会报错
    l = res.popleft()  # 从左边弹出值
    # 双端队列有个很大的缺点,他能从中间添加值,这是一般队列没有的功能
    res.insert(1, 'b')  # deque([1, 'b', 2, 3])  根据索引位置任意插值
    
    
    
    
    # 有序字典
    from collections import OrderedDict
    
    # 在Python3中比较难看出有序字典,在python2中看的更加清晰
    # order_1 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    # print(order_1)
    order_d2 = OrderedDict()
    order_d2['x'] = 1
    order_d2['y'] = 2
    order_d2['z'] = 3
    
    
    
    
    
    # defaultdict(默认字典)
    from collections import defaultdict
    my_dict = defaultdict(list)  # 后续该字典中新建的key对应的value默认就是列表  每个键对应不同的列表
    print(my_dict['aaa'])  # 为空列表
    my_dict1 = defaultdict(int)
    print(my_dict1['name'])  # 为数字0
    my_dict2 = defaultdict(dict)
    print(my_dict2['name'])  # 为空字典
    my_dict3 = defaultdict(bool)
    print(my_dict3['name'])  # 想都不用想 这为False
    # 小练习
    values = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
    dic1 = defaultdict(list)
    for i in values:
        if i >= 66:
            dic1['k1'].append(i)
        else:
            dic1['k2'].append(i)
    print(dic1)
    
    
    
    # Counter
    from collections import Counter
    s = 'asdgdfgjsdljgfjsdfklsjdf'
    i = Counter(s)  # 循环打印字符串,将每个字母与出现的次数以k:v形式存储
    # print(i)  # Counter({'d': 5, 's': 4, 'f': 4, 'j': 4, 'g': 3, 'l': 2, 'a': 1, 'k': 1})

    时间模块

    # 共两个模块一个为time 另一个为datetime
    # time
    '''
    三种表现形式
        1.时间戳
        2.格式化时间(就是我们平常看到的时间)
        3.结构化时间
    '''
    import time
    # print(time.time())  # 距离1970年1月1日0点0时0分0秒的秒数
    
    # 格式化时间
    # print(time.strftime('%Y-%m-%d %H:%M:%S'))  # y需要大写  后面的小时分钟秒都需要大写
    # print(time.strftime('%Y-%m-%d %X'))        # 小时分钟秒都可以用大写x来代替
    print(time.strftime('%Y-%m',time.localtime()))
    # 时间元组  time.localtime()
    
    
    
    
    
    
    
    
    
    import datetime
    # 获取本地时间
    # 年月日
    now_date = datetime.date.today()
    print(now_date)  # 2019-07-18
    # 年月日时分秒
    now_time = datetime.datetime.today()
    print(now_time)  # 2019-07-18 21:41:53.346249

    random模块

    # 共两个模块一个为time 另一个为datetime
    # time
    '''
    三种表现形式
        1.时间戳
        2.格式化时间(就是我们平常看到的时间)
        3.结构化时间
    '''
    import time
    # print(time.time())  # 距离1970年1月1日0点0时0分0秒的秒数
    
    # 格式化时间
    # print(time.strftime('%Y-%m-%d %H:%M:%S'))  # y需要大写  后面的小时分钟秒都需要大写
    # print(time.strftime('%Y-%m-%d %X'))        # 小时分钟秒都可以用大写x来代替
    print(time.strftime('%Y-%m',time.localtime()))
    # 时间元组  time.localtime()
    
    
    
    
    
    
    
    
    
    import datetime
    # 获取本地时间
    # 年月日
    now_date = datetime.date.today()
    print(now_date)  # 2019-07-18
    # 年月日时分秒
    now_time = datetime.datetime.today()
    print(now_time)  # 2019-07-18 21:41:53.346249

    os模块

    # os模块是跟操作系统打交道的模块
    import os
    
    BASE_DIR = os.path.dirname(__file__)
    TANK_DIR = os.path.join(BASE_DIR, 'tank老师精选')  # 拼接绝对路径
    tank_list = os.listdir(TANK_DIR)  # 查看文件夹中有什么文件 返回的是列表  文件夹中没有内容时,返回空list
    
    
    # os.mkdir('tank')  # 创建文件夹
    
    
    print(os.path.exists('111'))  # False  查兰文件夹是否存在
    print(os.path.exists('tank'))  # True
    print(os.path.exists(r'D:pyday16	ank老师精选	ank-448.txt'))  # True  查看文件是否存在
    
    
    print(os.path.isfile(r'D:pyday16	ank老师精选111'))  # 只能判断文件 不能判断文件夹  False
    print(os.path.isfile(r'D:pyday16	ank老师精选	ank-448.txt'))  # 只能判断文件 不能判断文件夹  True
    
    
    # os.rmdir(r'D:pyday16	ank老师精选111')  # 只能删空文件夹
    
    
    print(os.getcwd())  # 获取当前目录
    os.chdir(r'D:pyday16	ank老师精选')  # 切换当前目录
    print(os.getcwd())  # D:pyday16	ank老师精选 已经切换到tank老师精选目录
    
    
    print(os.path.getsize(r'D:pyday16	ank老师精选	ank-448.txt'))  # 获得文件大小  字节个数
    
    
    # 练习题  让用户选择想看哪部
    '''
    while True:
        movie_tank = os.listdir('tank老师精选')
        for i,j in enumerate(movie_tank):
            print(i+1,j)
        choice = input('请选择你想看哪一部?').strip()
        if not choice.isdigit():
            print('输入有误')
            continue
        choice = int(choice)
        if choice in range(1,len(movie_tank)+1) :
            BASE_DIR = os.path.dirname(__file__)
            MOVIE_DIR = os.path.join(BASE_DIR, 'tank老师精选')
            look_file = os.path.join(MOVIE_DIR,movie_tank[choice-1])
            with open(look_file,'r',encoding='utf-8') as f:
                res = f.read()
                print(res)
        else:
            print('不在选择范围中')
    '''

    sys模块

    import sys  # 与python打交道的模块
    # sys.path.append()  将某个路径添加到环境变量中
    print(sys.version)  # 查看python版本
    
    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('用户不存在 无法执行当前文件')
    subprocess 子进程
    # 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'))
    序列化模块
    ''''''
    '''
    序列化
        序列:字符串
        序列化:将其他数据转化为字符串
        反序列化:字符串转换为其他数据
    '''
    # json模块(********************)
    # 所有语言都支持json
    # 支持的数据类型很少  字符串 列表 字典 整型 元组(转成列表)  布尔值
    
    
    # pickle模块(****)
    # 只支持python
    # python中所有数据类型都支持
    
    
    import json
    
    '''
    dumps:序列化 将其他数据类型转换为json格式字符串
    loads:反序列化  将json字符串转换为其他数据类型
    
    dump  
    load
    '''
    
    d = {'name': 'clydsb'}
    res = json.dumps(d)  # {"name": "clydsb"}  json格式字符串为双引号
    res1 = json.loads(res)
    print(res1, type(res1))  # {'name': 'clydsb'} <class 'dict'>
    
    with open('clysb,txt', 'w', encoding='utf-8') as f:
        json.dump(d, f)  # 将d转为字符串并写入文件
    
    with open('clysb,txt', 'r', encoding='utf-8') as f:
        res = json.load(f)  # 反序列化只能读一条信息
        print(res)  # {'name': 'clydsb'}
    
    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))
    
    # pickle
    import pickle
    
    d1 = {'name': 'clydsb'}
    res = pickle.dumps(d)  # 将对象直接转成二进制
    print(pickle.dumps(d))
    res1 = pickle.loads(res)
    print(res1, type(res1))
    
    # 用pickle操作文件的时候 文件的打开模式必须是b模式
    with open('cly', 'wb') as f:
        pickle.dump(d1, f)
    with open('cly', 'rb') as f:
        res = pickle.load(f)
        print(res, type(res))
    
    
    
     
  • 相关阅读:
    php 信号量
    .net 反射初体验
    IEnumerable,IQueryable之前世今生
    [SQL]511+512+534+550+569
    [SQL]183+184+185+196+197
    [SQL]3.26--175+176+177+178+180+181+182
    [剑指offer]10.斐波那契数列+青蛙跳台阶问题
    [剑指offer]14-1.剪绳子
    [剑指offer]62.圆圈中最后剩下的数字
    [剑指offer]52.两个链表的第一个公共节点
  • 原文地址:https://www.cnblogs.com/asdaa/p/11210238.html
Copyright © 2020-2023  润新知