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

     

    collection模块:
    
    ```python
        在字典,列表,元组,集合的基础上,还提供了具名元组,双端队列,计数器,有序字典,默认字典等
    1.namedtuple:具名元组,具有名字的元组
        from collections import namedtuple
        eg1:
        point = namedtuple('坐标',['x','y']) #可以传可迭代对象   也可穿字符串  串间空格隔开
        p = point(1,2)  #元素个数与 namedtuple的第二个参数中的个数一一对应
        print(p.x)
        print(p.y)
        eg2:
        b = namedtuple('扑克','color 大小')
        a = b('','K')
        print(a)
    2.depue:双端队列  可以高效的实现添加,删除,插入;适用于队列与栈
           特点:可以根据索引在任意位置插值,正常队列不能插值
        from collections import deque
        q = deque(['a','b','c'])
        q.append('d')
        q.appendleft('lii')
        b=q.popleft()
        print(b)
        deque除了实现list的append()和pop()外,还支持appendleft()和popleft()
    3.OrdereDict:有序字典,平常字典的key是无序的,要让他有序就用有序字典
        无序字典:key无序,无法确定key的顺序
        >>> from collections import OrderedDict
        >>> d = dict([('a', 1), ('b', 2), ('c', 3)])
        >>> d # dict的Key是无序的
        {'a': 1, 'c': 3, 'b': 2}
        有序字典:key会根据插入顺序排
        >>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
        >>> od # OrderedDict的Key是有序的
        OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    4.defaultdict:默认字典
        有集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中;
        老方法:
            values = [11, 22, 33,44,55,66,77,88,99,90]
            my_dict = {}
            for value in  values:
            if value>66:
                if my_dict.has_key('k1'):
                    my_dict['k1'].append(value)
                else:
                        my_dict['k1'] = [value]
            else:
                if my_dict.has_key('k2'):
                    my_dict['k2'].append(value)
                else:
                    my_dict['k2'] = [value]
         新方法:
             from collections import defaultdict
            values = [11, 22, 33,44,55,66,77,88,99,90]
            my_dict = defaultdict(list)
            for value in  values:
                if value>66:
                    my_dict['k1'].append(value)
                else:
                    my_dict['k2'].append(value)
    5.Counter:计数器,计算个数
           老方法:
             d = {}
            b=[]
            c = 'sdskhgusdfsdfs'
            for i in c:
               b.append(i)
            b.count(i)
            d[i]=b.count(i)
            print(d)
        新方法:
            from collections import Counter
            res = 'sdskhgusdfsdfs'
            print(Counter(res)
    ```
    
    time模块:
    
    ```
    表示时间的三张形式:时间戳,格式化时间(用来展示给人看的),时间结构化
    import time
    1.time.time()        #1500875844.800804
    2.time.strftime('%Y-%m-%d %H:%M:%S')         # %X  等价于%H:%M:%S'    2019-07-18 20:04:35
    3.time.localtime()    #(tm_year=2019, tm_mon=7, tm_mday=18, tm_hour=20, tm_min=3, tm_sec=0)    
    三者间的转化:
    
    
    
    ```
    
    date time模块
    
    ```
    import datetime
    # 自定义日期
    res = datetime.date(2019, 7, 15)
    print(res)  # 2019-07-15
    # 获取本地时间
    now_date = datetime.date.today()
    print(now_date)  # 2019-07-01
    # 年月日时分秒
    now_time = datetime.datetime.today()
    print(now_time)  # 2019-07-01 17:46:08.214170
    print(now_time.year)  # 获取年份2019
    print(now_time.month)  # 获取月份7
    print(now_time.day)  # 获取日1
    print(now_time.weekday())  # 获取星期(weekday星期是0-6) 0表示周一
    print(now_time.isoweekday())  # 获取星期(weekday星期是1-7) 1表示周一
    # 获得本地日期 年月日
    tday = datetime.date.today()
    # 定义操作时间 day=7 也就是可以对另一个时间对象加7天或者减少7点
    tdelta = datetime.timedelta(days=7)
    # 打印今天的日期
    print('今天的日期:{}'.format(tday))  # 2019-07-01
    # 打印七天后的日期
    print('从今天向后推7天:{}'.format(tday + tdelta))  # 2019-07-08
    ```
    
    random模块
    
    ```
    随机小数:random.random(0,1)           (0,1)
    随机整数:random.randint(0,9)          [0,9]
    洗牌:    random.shuffle([1,3,5])       [1,5,3],打乱次序
    摇号:    random.choice([1,3,5])      随机选择一个返回
    应用场景:生成随机验证码
        def my(a):
             h =''
             for i in range(a):
                 f =chr(random.randint(97,122))
                 A =chr(random.randint(65,99))
                 c = str(random.randint(0,9))
                 h+=random.choice([f,A,c])
             return h
         print(my(5))
    ```
    
    o s 模块:与操作系统大交到
    
    ```python
    常用的
    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.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
    os.path.getsize(path) 返回path的大小
    os.path.join(path1[, path2[, ...]])  将多个路径组合后返回
    os.path.dirname(path) 返回path的目录
    os.path.isabs(path)  如果path是绝对路径,返回True
    
    融汇贯通:
    import os
    BASE_DIR = os.path.dirname(__file__)
    MOVIE_DIR = os.path.join(BASE_DIR,'老师们的作品')
    movie_list = os.listdir(MOVIE_DIR)
    while True:
        for i,j in enumerate(movie_list,1):
            print(i,j)
        choice = input('你想看谁的啊(今日热搜:tank老师)>>>:').strip()
        if choice.isdigit():  # 判断用户输入的是否是纯数字
            choice = int(choice)  # 传成int类型
            if choice in range(1,len(movie_list)+1):  # 判断是否在列表元素个数范围内
                # 获取用户想要看的文件名
                target_file = movie_list[choice-1]
                # 拼接文件绝对路径
                target_path = os.path.join(MOVIE_DIR,target_file)
                with open(target_path,'r',encoding='utf-8') as f:
                    print(f.read())
    
    ```
    
    sys模块:与python解释器打交到
    
    ```python
    sys.path.append()  将某个路径添加到系统的环境变量中
    sys.argv   命令行参数List,第一个元素是程序本身路径
    eg:
        if len(sys.argv) <= 1:
                print('请输入用户名和密码')
        else:
                username = sys.argv[1]
             password = sys.argv[2]
             if username == 'jason' and password == '123':
                 print('欢迎使用') 
             else:
                 print('用户不存在 无法执行当前文件')
    ```
    
    序列化与反序列化
    
    ```
    序列化:就是把其他类型的数据转化为字符串的过程
    反序列化:是把字符串转化成其他的数据类型
    序列化的目的:让程序便于维护,让对象持久化,以便于传递到其他地方
    dump:序列化到文件中               load:从文件中反序列化出来      存
    dumps:序列化                     loads:反序列化                 取
    json模块
            所有的语言都支持json格式,都认识它
            但其本身支持的数据类型很少  字符串 列表 字典 整型 元组(转成列表)  布尔值
               json 格式的字符串必须是双引号的
               
    pickle模块
            只支持python的(自己与自己玩)
            python所有的数据类型都支持
            用pickle操作文件的时候 文件的打开模式必须是b模式
    注:写入文件的数据必须是字符串,基于网络传输的数据必须是二进制
    --------------------------------------------------------------------------------
    import json
    dic = {"name": "王彦飞", "age": "18"}
    obj = json.dumps(dic,ensure_ascii=False)
    print(obj)
    user = json.loads(obj)
    print(user)
    with open('name','w',encoding='utf-8')as f:
        data =json.dump(dic,f)
        print(data)
    
    f = open('name','r',encoding='utf-8')
    d = json.load(f)
    print(d)
    f.close()
    
    f = open('bb','w',encoding='utf-8')
    data = json.dumps('hello')
    re = json.dumps('what is your name')
    f.write('%s
    '%data)
    f.write('%s
    '% re)
    print(data)
    print(re)
    f.close()
    
    with open('bb','r',encoding='utf-8')as f:
        for line in f:
            res = json.loads(line)
            print(line)
    --------------------------------------------------------------------------------
    import pickle
    dic = {'name':'王彦飞','age':'18'}
    b = pickle.dumps(dic)
    print(b)
    c = pickle.loads(b)
    print(c)
    with open('bb','wb') as f:
        data = pickle.dump(dic,f)
    with open('bb','rb',) as f:
       b= pickle.load(f)
       print(b)
    ```
    
    subprocess模块:子进程
    
    ```python
    进程:指的是一个正在运行中的程序
    子进程:指的是由另个一进程开启的进程  a在运行过程中 开启了b   b就是a的子进程
    为什么要开启子进程
        当一个程序在运行过程中有一个任务,自己做不了或是不想做 就可以开启另一个进程来帮助其完成任务
        例如 qq中收到一个链接 点击链接 就开启了; 浏览器  浏览器就是qq的子进程
    -----------------------------------------------------------------------------------------------------eg:
    import subprocess
    obj =subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    print(obj.stdout.read().decode('gbk'))
    
    obj = subprocess.Popen('help',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) print(obj.stdout.read().decode('gbk'))
    
    p1 = subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE)
    p2=subprocess.Popen("findstrQQ",shell=True,stdin=p1.stdout,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    print(p2.stdout.read())
    print(p2.stderr.read())
    -----------------------------------------------------------------------------------------------------
    subprocess.Poen(参数1:指令,参数2:是否是一个指令,3 错误输出管道,4 输入管道,5 输出管道)
    取出管道中的数据
    p.stderr.read()
    p.stdout.read()
    将输入写入管道 交给对方进程
    p.stdin.write(p.stdout.read())
    ```

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    HDU
    HDU
    HDU
    CodeForces
    还没有过的题目记录
    HDU
    FZU
    排序:根据数组里某个对象排序
    获取当前毫秒数
    选择日期默认月初到月末
  • 原文地址:https://www.cnblogs.com/wyf20190411-/p/11210048.html
Copyright © 2011-2022 走看看