• 常用模块升级


      一、collection 模块

      二、time 模块

      三、random 模块

      四、os 和sys mo模块

      五、系列化与反序列化 json 模块

      六、subprocess 模块

      一、collection 模块

      1.1 namedtuple(具名分组)

    # 1.可以表示坐标二维和三维
    # from collections import namedtuple
    #
    # point = namedtuple('坐标',['x','y','z'])  # 第一个为字段名 第二个参数为可以迭代对象
    #
    # p = point(1,2,4)
    # print(p)  # 坐标(x=1, y=2, z=4)
    
    
    # 2.洗牌
    # from collections import namedtuple
    # t = namedtuple('扑克牌',' color num')
    # t1 = t('黑桃','A')
    # print(t1.color)
    # print(t1.num)
    # l = [90,1,2,9,4,5,8,23,42,5,6]
    # import random
    # random.shuffle(l)
    # print(l)
    
    #
    # # 对应的人物
    # r = namedtuple('日本','name person size')
    # r1 = r('东京','宫崎骏','m')
    # print(r1)
    # 2.queue(队列:)与deque()双端队列
    # 2.queue(队列)
    # 队列:先进先出
    # l = [12,22,33,44]
    # import queue
    # # 先生成一个对象
    # q = queue.Queue()
    # # 往队列里面添加值
    # q.put('1')
    # q.put('2')
    # q.put('3')
    # q.put('4')
    
    # 朝队列要值
    # print(q.get())
    # print(q.get())
    # print(q.get())
    # print(q.get())
    # print(q.get()) # 没有值了get()会一直等待用户传值,直到等到为止
    
    # deque双端队列:所谓的双端队列就是两边都可以进出
    # from collections import deque
    # q = deque(['a','b','c'])  # deque外层是小括号
    # q.append(1)
    # q.append(2)
    # q.appe nd(3)
    # print(q)  # ['a', 'b', 'c', 1, 2, 3] 一次重尾部添加
    
    # appendlef()
    # q.appendleft(2)
    # print(q,type(q))  #
    # q.popleft()
    # q.popleft(1)  # popleft()删除元素不用传参
    # print(q)

      

    # 3.orderedDict(有序字典)
    # 和正常字典做对比
    # from collections import OrderedDict
    # normal_dic = {'name':'coc','age':18}
    # order_d = OrderedDict([('a',1),('b',2),('b',3)])
    # print(order_d,type(order_d))
    # order_d['x'] = 1
    # order_d['y'] = 2
    # order_d['z'] = 3
    # for i in order_d:
    #     print(i)

      


    # 4.defaultDict(默认字典)
    values = [11, 22, 33,44,55,66,77,88,99,90]
    # 将大于66的值添加到字典中不要先将value 设为空列表
    # 之前的用法为
    # 方法一:
    # dic = {'k1':[],"k2":[]}
    # for i in values:
    #     if i >66:
    #         dic['k1'].append(i)
    #     else:
    #         dic['k2'].append(i)
    # print(dic)
    
    # 方法二:
    # 不能设置默认的[]列表了,怎么做:.>>巧了刚好有个defaultDict()
    # (默认是你输入什么类型就是什么类型)后续该字典中新建的Key对应的values默认就是列表
    # from collections import defaultdict
    #
    # my_dic = defaultdict(list)
    # # print(my_dic[''])  # []
    # # print(my_dic['yyy'])  # []
    # for i in values:
    #     if i>66:
    #         my_dic['k1'].append(i)
    #     else:
    #         my_dic['k2'].append(i)
    # print(my_dic)
    #

      

    # 5.Counter(字符串计数器):可以直接以字典的形式

    
    
    # 统计字符串中出现的个数并且以字点的个数作为value
    
    s = 'qwwwqqqeee'
    # 方法一:
    # dic = {}
    # for i in s:
    #     if i in dic:
    #         dic[i] +=1
    #
    #     else:
    #         dic[i] =1
    # print(dic)
    # 方法二:
    from collections import Counter
    l = dict(Counter(s))  # 可以直接转
    print(l)
    #
    dic = {}
    for i in l.items():  # 内部原理
        dic[i[0]] = i[1]
    print(dic)
    二、时间模块
      
    """
    三种表现形式
    1.时间戳
    2.格式化时间(用来展示给人看的)
    3.结构化时间
    """
    # 字符串的转换
    # import time
    # res = time.strftime('%Y-%m-%d %X')  # 2019-07-18 20:39:43
    # print(res)  # 2019-07-18 20:33:37
    #
    
    # datetime
    
    # import datetime
    #
    # res1 = datetime.date.today()  # 2019-07-18
    # res2 = datetime.datetime.today()  # 2019-07-18 20:39:43.402935
    #
    #
    # print(res1)
    # print(res2)
    # print(res2.isoweekday())  # 4 周四
    # print(res1.month,res1.year,res1.day)  #7 七月: 2019 年: day:18
    
    # UTC时间 标准时间
    import datetime
    day_t = datetime.datetime.utcnow()
    print(day_t)  # 2019-07-18 12:42:59.687143 东八区
    

      三、random模块


    """
    大写字母 小写字母 数字

    5位数的随机验证码
    chr
    random.choice
    封装成一个函数,用户想生成几位就生成几位
    """
    
    
    ef 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))
            # 从上面三个中随机选择一个作为随机验证码的某一位
            # random.choice() 是一个方法
            code += random.choice([upper_str,lower_str,random_int])
        return code
    res = get_code(4)
    print(res)
    
    

      四、os和sys 模块

    # os模块:跟操作系统打交道的模块
    # sys模块:跟python解释器打交道
      4.1os 中常用的方法:
    # # 可以通过listdir()拿到文件下的所有文件
    import os
    # os.mkdir('明日内容')  # 创建文件夹
    # 2.os.exists()
    # print(os.path.exists('D:datasday16今日作品coco.txt'))  # 判断文件/文件夹是否存在
    
    # 3.os.isfile()
    # print(os.path.isdir('D:datasday16今日作品'))  # 判断文件夹是否存在
    
    # 4.
    # os.getcwd()
    print(os.getcwd())  # D:datasday16 查看当前文件运行的文件目录路径
    
    print(os.chdir('D:datasday16今日作品'))
    print(os.getcwd())  # D:datasday16今日作品 切换当前的文件目录
    print(os.path.getsize('D:datasday16今日作品coco.txt'))  # 字节数

      实列:

    # os 中常用的方法:
    # 需求打开文件的内容(下载电影):
    # 拼接文件的路径:
    # import os
    # BASE_DIR = os.path.dirname(__file__)  # 当前所在是os模块层只要上一级
    # # 项目所在文件夹路径:
    # MOVIE_LIST_DIR = os.path.join(BASE_DIR,'今日作品')  # 拼接仅仅只能到到当前的电影目录,没有文件名
    #
    # # 可以通过listdir()拿到文件下的所有文件
    # movie_list = os.listdir(MOVIE_LIST_DIR)  #
    
    # for index,movie in enumerate(movie_list,1):
    
    #     print(index, movie)
    # choice = input('输入电影索引(今日推荐tank热搜)>>>:').strip()
    # if choice.isdigit():
    #     choice = int(choice)
    #     if choice in range(1,len(movie_list)+1):
    #         # 想要获取用户的文件名
    #         target_name = movie_list[choice-1]  # 取索引
    #
    #         # 拼接文件的绝对路径
    #         target_name_path = os.path.join(MOVIE_LIST_DIR,target_name)
    #         # 打开文件
    #         with open(target_name_path,'r',encoding='utf-8')as f:
    #             for line in f:
    #                 print(line)

      4.2 sys模块

    # sys.path.append()  # 将环境变量添加到系统的环境变量中

    print(sys.version) # 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]

    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模块:

      序列化与反序列化:

      5.1  什么是序列化: 

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

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

    5.2 什么是反序列化:
     
           序列化:其他数据类型转成字符串的过程
       反序列化:字符串转成其他数据类型

      5.3 json能够序列化的数据类型:
      
      json模块(******)
      所有的语言都支持json格式
      支持的数据类型很少 字符串 列表 字典 整型 元组(转成列表) 布尔值
      pickle模块(****)
      只支持python
      python所有的数据类型都支持
     实列:
      
    mport json
    with open(r'D:datasday161.txt','rt',encoding='utf-8')as f:
        # f方法一:
        # for line in f:
        #  ic = json.loads(res)
        # user_dic1 = json.load(f)
        # print(user_dic)
        # print(user_dic1)
        # print(user_dic)
        # for line in f:
        #     user_dic = json.loads(line)
        #     print(user_dic)
    
        # res = f.read()
        # user_dic =json.loads(res)
        # print(user_dic)
        # user_dic = json.load(f)
        # print(user_dic)
      总结今天遇到的问题:

      1.是在写随机生成验证码的时候忘记将 num = random.randint(0,9) 转成字符串 因为我们要拼接成字符串 alp_lower = chr(random.randint(65,90)
      2.在写文件os.listdir()将改目录下的所有文件打印出来;for index,moive in enumerate()在后面加了start=1 会将序列的索引变为从一开始
      3,在选择movie_list 文件名的时候 必须choice-1 因为moive_List[choice]是索引 所以要将1 索引默认是0 开始 不然取不到文件
      4.在写json模块序列化与反序列化的时候
      操作方法总结:
        序列化:json.dumps() dunmps() 是将其他数据类型转化成字符串直接存到文件
        反序列化:json.laods()是将字符串 读取成原来存的数字类型:注意若文件中存了多组记得for 依次循环获取每行字符串在通过
          res = f.read() 单行
          for line in f:
            user_dic = json.loads(line)
         json.loads(res/line)
        

      # dump():序列化:是将数据类型如 json 能就解析的数据类型:dict  lsit ,字符串,整形,bool,元组转成json中的列表对象、

       res = json.dump(user_dic,f) 通过文件句柄对象写到文件中

       load() 将字符串反序列为存的数据类型(user_dic) 通过操作文件反序列化。

          picle()写的时候注意是二进制 ,存的是对象obj

      json宗旨总之以什么方式存的,取得时候就给我返回什么数据类型

      

     
     
     



    
    
  • 相关阅读:
    TP5报如下的错误 Indirect modification of overloaded element of thinkpaginatorCollection has no effect【转】
    PHPnumber_format()函数的使用
    蓝桥杯-PREV28-地宫取宝
    HihoCode-1053-居民迁移
    HihoCode-1323-回文字符串
    蓝桥杯-PREV3-带分数
    HDU-6312-Game
    HDU-6438-Buy and Resell
    CF-1117C-Magic Ship
    HDU-2802-F(N)
  • 原文地址:https://www.cnblogs.com/mofujin/p/11210930.html
Copyright © 2020-2023  润新知