zoukankan      html  css  js  c++  java
  • 模块

       今日类容

    1.collection模块

    2.时间模块

    3.random模块

    4.os模块

    5.sys模块

    6.序列化模块

    7.subprocess模块

    一  collection

    0.普通的队列,先进先出

    queue

     1 队列:现进先出(FIFO first in first out)
     2 import queue
     3 q = queue.Queue()  # 生成队列对象
     4 q.put('first')  # 往队列中添加值
     5 q.put('second')
     6 q.put('third')
     7 
     8 print(q.get())  # 朝队列要值
     9 print(q.get())
    10 print(q.get())
    11 print(q.get())  # 如果队列中的值取完了 程序会在原地等待 直到从队列中拿到值才停止
    View Code

    1.namedtuple:具名元组

      可以很方便的定义一种数据类型,他具备tuple的不可变性,也可以根据属性来引用,非常方便。

    1 from collections import  namedtuple
    2 point = namedtuple('p',['x','y'])
    3 p = point(1,2)
    4 print(p.x) #1
    5 print(p.y) #2
    View Code

    2.deque:双端队列,可以快速的从另一侧追加和推出对象

      可以高效的实现插入和删除的双向列表,适用于队列和栈。

    有四个方法:

      添加:append末尾添加,appendleft左边添加

      insert:可以往中间放 ,这是他不合理的地方

      取出:pop 右边取    , popleft左边取

    1 from collections import deque
    2 q= deque(['a','b','c'])
    3 q.append('x')
    4 q.appendleft('y')
    5 print(q)
    6  
    7 #deque(['y', 'a', 'b', 'c', 'x'])
    View Code

    3.Counter: 计数器,主要用来计数

      是一个简单的计数器,目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储。其中元素为key,个数为value. 计数值可以是任意的interger(含0和负数)

    1 from collections import Counter
    2 c = Counter('abcdeabcdabcaba')
    3 print(c)
    4 1
    5 输出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
    View Code

    4.OrdereDict: 有序字典 

      使用dict时,key是无序的,如果要保证key的顺序,可以用OrderedDict。OrderedDict的key是按照插入的顺序排列,不是key本身排序。 

    1 from collections import OrderedDict
    2 dic = dict([('a',1),('b',2),('c',3)])
    3 dic1 = OrderedDict([('a',1),('b',2),('c',3)])
    4 print(dic.keys()) #dict_keys(['a', 'b', 'c'])
    5 print(dic1.keys()) #odict_keys(['a', 'b', 'c'])
    View Code

    5.defaultdict: 带有默认值的字典

      使用dict时,如果key不存在,则抛出KeyError,如果希望key不存在时,返回一个默认值,可以用defaultdict。

    1 from collections import defaultdict
    2 dic = defaultdict(lambda :'N/A')
    3 dic['k1'] = 'abc'
    4 print(dic['k1']) #‘abc’
    5 print(dic['k2']) #N/A
    View Code

    二 时间模块

    1.时间模块

    时间模块分为三种表现形式:
      1.时间戳

      2.格式化时间(用来展示给人看的)

      3.结构化时间

    1.显示时间戳,时间戳就是从1970,1,1

    time.time

    1 import time 
    2 
    3 print(time.time())
    View Code

    2.格式化时间,可以显示时间给人看的

    指定打印时间句式'%Y-%m-%d %H:%M:%S'
     %X等价于%H:%M:%S
    strftime
    1 print(time.strftime('%Y-%m-%d'))
    2 print(time.strftime('%Y-%m-%d %H:%M:%S'))
    3 print(time.strftime('%Y-%m-%d %X'))  # %X等价于%H:%M:%S
    4 print(time.strftime('%H:%M'))
    5 print(time.strftime('%Y/%m'))
    View Code
    格式化时间补充:
     1 %y 两位数的年份表示(00-99 2 %Y 四位数的年份表示(000-9999 3 %m 月份(01-12 4 %d 月内中的一天(0-31 5 %H 24小时制小时数(0-23 6 %I 12小时制小时数(01-12 7 %M 分钟数(00=59 8 %S 秒(00-59 9 %a 本地简化星期名称
    10 %A 本地完整星期名称
    11 %b 本地简化的月份名称
    12 %B 本地完整的月份名称
    13 %c 本地相应的日期表示和时间表示
    14 %j 年内的一天(001-36615 %p 本地A.M.或P.M.的等价符
    16 %U 一年中的星期数(00-53)星期天为星期的开始
    17 %w 星期(0-6),星期天为星期的开始
    18 %W 一年中的星期数(00-53)星期一为星期的开始
    19 %x 本地相应的日期表示
    20 %X 本地相应的时间表示
    21 %Z 当前时区的名称
    22 %% %号本身
    View Code

    3.结构化时间,就是打印出来什么是什么的结果

    1 print(time.localtime())
    2 
    3 print(time.localtime(time.time()))
    4 res = time.localtime(time.time())
    5 print(time.time())
    6 print(time.mktime(res))
    7 print(time.strftime('%Y-%m',time.localtime()))
    8 print(time.strptime(time.strftime('%Y-%m',time.localtime()),'%Y-%m'))
    View Code

    4.datetime

     1  datetime
     2 import datetime
     3  print(datetime.date.today())  # date>>>:年月日
     4  print(datetime.datetime.today())  # datetime>>>:年月日 时分秒
     5  res = datetime.date.today()
     6  res1 = datetime.datetime.today()
     7  print(res.year)
     8  print(res.month)
     9  print(res.day)
    10  print(res.weekday())  # 0-6表示星期  0表示周一
    11 
    12  print(res.isoweekday())  # 1-7表示星期 7就是周日
    View Code
    5.时间的计算
    日期对象 = 日期对象 +/- timedelta对象
    timedelta对象 = 日期对象 +/- 日期对象

    1 current_time = datetime.date.today()  # 日期对象
    2 timetel_t = datetime.timedelta(days=7)  # timedelta对象
    3 res1 = current_time+timetel_t  # 日期对象
    4 
    5 print(current_time - timetel_t)
    6 print(res1-current_time)
    View Code

    案例:

    小练习 计算今天距离今年过生日还有多少天
    1 birth = datetime.datetime(2019,12,21,8,8,8)
    2 current_time = datetime.datetime.today()
    3 print(birth-current_time)
    View Code

    UTC时间,跟当前时区相差8小时

    1 dt_today = datetime.datetime.today()
    2 dt_now = datetime.datetime.now()
    3 dt_utcnow = datetime.datetime.utcnow()
    4 print(dt_utcnow,dt_now,dt_today)
    View Code


    random模块
    随机模块:import random
    有一些常用的语句:
    1.随机取一个你提供的整数范围内的数字  包含首尾
    random.randint
    1 print (random.randint(1,6))
    View Code

    2.随机取0-1之间小数

    random.random

    1 print(random.random())
    View Code

    3.摇号 随机从列表中取一个元素

    random.choice

    1 print(random.choice([1,2,3,4,5,6]))
    View Code

    4.可以把一个列表里的顺序打乱:也可以称之为洗牌

    random.shuffle

    1 res = [1,2,3,4,5,6]
    2 random.shuffle(res) 
    3 print(res)
    View Code
    random可以随机生成数字或字母组合的验证码
    一般用于生成验证码,线上赌场发牌等等

    那么这里我们写了一个生成随机验证码的例子
    规则:
      大小写字母,小写字母,数字
      5位数的随机码验证,然几位后封装成一个函数,
      用户想生成几位就生成

     1 def get_code(n):
     2     code = ''
     3     for i in range(n):
     4         # 先生成随机的大写字母 小写字母 数字
     5         upper_str = chr(random.randint(65,90))
     6         lower_str = chr(random.randint(97,122))
     7         random_int = str(random.randint(0,9))
     8         # 从上面三个中随机选择一个作为随机验证码的某一位
     9         code += random.choice([upper_str,lower_str,random_int])
    10     return code
    11 res = get_code(4)
    12 print(res)
    View Code
    
    
    
    四 os模块
    os模块:跟操作系统打交道的模块
    sys模块:跟python解释器打交道的模块(或者说应用程序)

    os模块常用方法:
    os.path.exists 判断文件是否存在
    os.path.isfile 只能判断文件,不能判断文件夹
    os.rmdir 只能删除空文件夹
    os.chdir 切换当前所在的目录

    os模块方法补充

     1 os.getcwd():  获取当前工作目录,(即当前Python脚本工作的目录路径)
     2 
     3   os.chdir('dirname'):  改变当前脚本的工作目录,相当于shell下的cd
     4 
     5   os.system('bash command'):  运行shell命令,直接显示(相当于启动一个全新的shell,然后去执行那条命令,命令执行完成过后,shell直接退出)
     6 
     7   os.curdir:  返回当前目录字符串名
     8 
     9   os.pardir:  返回当前目录的父目录的字符串名
    10 
    11   os.makedirs('dirname1/dirname2'):  可生成一个多层递归目录
    12 
    13   os.removedirs('dirname1'):  若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依次类推
    14 
    15   os.mkdir('dirname'):  创建一个目录
    16 
    17   os.rmdir('dirname'):  删除一个目录,若目录不为空则无法删除,报错
    18 
    19   os.listdir('dirname'):  显示指定目录下,所有的文件和子目录,包括隐藏文件
    20 
    21   os.remove():  删除文件
    22 
    23   os.rename('oldname','newname'):  重命名文件/目录,如果新的文件名/目录名已经存在,则会报错
    24 
    25   os.stat(' path/filename'):  获取文件/目录信息,并可以获取到文件的大小
    26 
    27   os.sep:  输出操作系统特定的路径分隔符 ,如:win 为‘\’,Linux为‘/28 
    29   os.liesep:  输出当前平台使用的行终止符,如 win为 ‘	
    ’,Linux为‘
    ’
    30 
    31   os.pathsep:  输出用于分割文件路径的字符串
    32 
    33   os.name:  输出字符串指示当前使用平台,如 win ->'nt' ; Linux ->'posix'
    34 
    35   os.environ:  获取操作系统的环境变量
    36 
    37   os.path.abspath(path):  返回path规范化的绝对路径
    38 
    39   os.path.split(path):   将path分割成目录和文件名二元组返回
    40 
    41   os.path.dirname(path):  返回path的目录
    42 
    43   os.path.basename(path):  返回path最后的文件名(一个绝对路径只返回最后的文件名)
    44 
    45   os.path.exists(path):  判断路径是否存在,如果path存在,返回True;如果不存在,返回Flase
    46 
    47   os.path.isabs(path):  判断是否是绝对路径,如果是,则返回True
    48 
    49   os.path.isfile(path):  判断是否是一个文件
    50 
    51   os.path.isdir(path):  判断是否是一个存在的目录
    52 
    53   os.path.join(path1[,path2[,.......]]):  将路径和文件名分为一个列表中的两个元素,将它们拼起来
    54 
    55   os.path.getatime(path):  返回path所指向的文件或者目录的最后存取时间
    56 
    57   os.path.getmtime(path):  返回path所指向的文件或者目录的最后修改时间
    58 
    59   os.popen('dir'):  相当于打开了一个临时的文件存储打开的目录(可以赋给变量,字符串的形式) 
    View Code

    案例:

    
    
     1 import os
     2 BASE_DIR = os.path.dirname(__file__)
     3 MOVIE_DIR = os.path.join(BASE_DIR,'老师们的作品')
     4 movie_list = os.listdir(MOVIE_DIR)
     5 while True:
     6     for i,j in enumerate(movie_list,1):
     7         print(i,j)
     8     choice = input('你想看谁的啊(今日热搜:tank老师)>>>:').strip()
     9     if choice.isdigit():  # 判断用户输入的是否是纯数字
    10         choice = int(choice)  # 传成int类型
    11         if choice in range(1,len(movie_list)+1):  # 判断是否在列表元素个数范围内
    12             # 获取用户想要看的文件名
    13             target_file = movie_list[choice-1]
    14             # 拼接文件绝对路径
    15             target_path = os.path.join(MOVIE_DIR,target_file)
    16             with open(target_path,'r',encoding='utf-8') as f:
    17                 print(f.read())
    18 
    19 
    20 
    21 os.mkdir('tank老师精选')  # 自动创建文件夹
    22 print(os.path.exists(r'D:Python项目day16
    ion老师精选'))  # 判断文件是否存在
    23 print(os.path.exists(r'D:Python项目day16老师们的作品	ank老师.txt'))  # 判断文件是否存在
    24 print(os.path.isfile(r'D:Python项目day16	ank老师精选'))  # 只能判断文件 不能判断文件夹
    25 print(os.path.isfile(r'D:Python项目day16老师们的作品	ank老师.txt'))  # 只能判断文件 不能判断文件夹
    26 
    27 os.rmdir(r'D:Python项目day16老师们的作品')  # 只能删空文件夹
    28 
    29 print(os.getcwd())
    30 print(os.chdir(r'D:Python项目day16老师们的作品'))  # 切换当前所在的目录
    31 print(os.getcwd())
    32 
    33 # 获取文件大小
    34 print(os.path.getsize(r'D:Python项目day16老师们的作品	ank老师.txt'))  # 字节大小
    35 with open(r'D:Python项目day16老师们的作品	ank老师.txt',encoding='utf-8') as f:
    36     print(len(f.read()))
    View Code
    
    
    五 sys模块
    sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运
    行时配置以及资源,从而可以与前当程序之外的系统环境交互,如:Python解释器。


    sys模块的常用方法
    import sys
    sys.path.append() 将=某个路径添加到系统的环境变量中
    print(sys.platfrom) 获取当前系统平台。
    print(sys.version) python解释器的版本
    print(sys.argv) 命令行启动文件,可以做身份的验证

    案例 :

     1 if len(sys.argv) <= 1:
     2     print('请输入用户名和密码')
     3 else:
     4     username = sys.argv[1]
     5     password = sys.argv[2]
     6     if username == 'jason' and password == '123':
     7         print('欢迎使用')
     8         # 当前这个py文件逻辑代码
     9     else:
    10         print('用户不存在 无法执行当前文件')
    View Code
    
    

    六 json模块  pickle模块

      JSON(Java Script Object Notation):一种轻量级数据交互格式,相对于XML而言更简单,也易于阅读和编写,机器也方便解析和生成,Json是JavaScript中的一个子集。python的json模块序列化与反序列化的过程分别是encoding和decoding。

    • encoding:把一个python对象编码转换成Json字符串。
    • decoding:把json格式字符串编码转换成python对象。
    json模块分为:序列化 和 反序列化

    序列化:
      序列:字符串
      序列化:其他数据类型转换成字符串的过程
    注意:1.写入文件的数据必须是字符串
       2.基于网络传输的数据必须是二进制 

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

    json 模块:
      所有的语言都支持json格式
      但是支持的数据类型很少,只有 字符串,列表,字典,整型,元组(转成列表),布尔值

    json一共就四个方法:

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

    dumps:序列化  把其他数据类型转换为json格式的字符串

    往文件里写用下面的

    load:反序列化  将文件的内容转换成为json数据

    dump:序列化  把json数据写入到文件中

    案例:dunps loads
    1 import json
    2 d = {"name":"jason"}
    3 print(d)
    4 res = json.dumps(d)  # json格式的字符串 必须是双引号 >>>: '{"name": "jason"}'
    5 print(res,type(res))
    6 res1 = json.loads(res)
    7 print(res1,type(res1))
    View Code
    
    

    案例:dump load

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

    注意:不能多次反序列化


    案例:可以序列化多个和反序列化多个
     1 import json
     2 with open('userinfo','w',encoding='utf-8') as f:
     3     json_str = json.dumps(d)
     4     json_str1 = json.dumps(d)
     5     f.write('%s
    '%json_str)
     6     f.write('%s
    '%json_str1)
     7 
     8 
     9 with open('userinfo','r',encoding='utf-8') as f:
    10     for line in f:
    11         res = json.loads(line)
    12         print(res,type(res))
    13 t = (1,2,3,4)
    14 print(json.dumps(t))
    View Code
    
    

    案例:在dumps的时候中文要指定编码,不然是二进制

    d1 = {'name':'朱志坚'}
    print(json.dumps(d1,ensure_ascii=False))默认是True,改为False就可以了

    pickle模块

    它只支持python,Python所有的数据类型都支持,
    他有很大的弊端,就是不能跟其他平台交互,称之为孤儿,
    在用pickle操作文件的时候,文件的打开模式必须是b模式
    因为他会直接将对象转为二进制

    案例:
    1 d = {'name':'jason'}
    2 with open('userinfo_1','wb') as f:
    3     pickle.dump(d,f)
    4 
    5 with open('userinfo_1','rb') as f:
    6     res = pickle.load(f)
    7     print(res,type(res))
    View Code
    
    
    

    七 subprocess模块

    sub :子
    process:进程

    模块详细解释:
     1 args: 要执行的shell命令,默认应该是一个字符串序列,如['df', '-Th']或('df', '-Th'),也可以是一个字符串,如'df -Th',但是此时需要把shell参数的值置为True。
     2 shell: 如果shell为True,那么指定的命令将通过shell执行。如果我们需要访问某些shell的特性,如管道、文件名通配符、环境变量扩展功能,这将是非常有用的。当然,python本身也提供了许多类似shell的特性的实现,如glob、fnmatch、os.walk()、os.path.expandvars()、os.expanduser()和shutil等。
     3 check: 如果check参数的值是True,且执行命令的进程以非0状态码退出,则会抛出一个CalledProcessError的异常,且该异常对象会包含 参数、退出状态码、以及stdout和stderr(如果它们有被捕获的话)。
     4 stdout, stderr:input: 该参数是传递给Popen.communicate(),通常该参数的值必须是一个字节序列,如果universal_newlines=True,则其值应该是一个字符串。
     5 run()函数默认不会捕获命令执行结果的正常输出和错误输出,如果我们向获取这些内容需要传递subprocess.PIPE,然后可以通过返回的CompletedProcess类实例的stdout和stderr属性或捕获相应的内容;
     6 call()和check_call()函数返回的是命令执行的状态码,而不是CompletedProcess类实例,所以对于它们而言,stdout和stderr不适合赋值为subprocess.PIPE;
     7 check_output()函数默认就会返回命令执行结果,所以不用设置stdout的值,如果我们希望在结果中捕获错误信息,可以执行stderr=subprocess.STDOUT。
     8 universal_newlines: 该参数影响的是输入与输出的数据格式,比如它的值默认为False,此时stdout和stderr的输出是字节序列;当该参数的值设置为True时,stdout和stderr的输出是字符串。
     9 3. subprocess.CompletedProcess类介绍
    10 需要说明的是,subprocess.run()函数是Python3.5中新增的一个高级函数,其返回值是一个subprocess.CompletedPorcess类的实例,因此,subprocess.completedPorcess类也是Python 3.5中才存在的。它表示的是一个已结束进程的状态信息,它所包含的属性如下:
    11 
    12 args: 用于加载该进程的参数,这可能是一个列表或一个字符串
    13 returncode: 子进程的退出状态码。通常情况下,退出状态码为0则表示进程成功运行了;一个负值-N表示这个子进程被信号N终止了
    14 stdout: 从子进程捕获的stdout。这通常是一个字节序列,如果run()函数被调用时指定universal_newlines=True,则该属性值是一个字符串。如果run()函数被调用时指定stderr=subprocess.STDOUT,那么stdout和stderr将会被整合到这一个属性中,且stderr将会为None
    15 stderr: 从子进程捕获的stderr。它的值与stdout一样,是一个字节序列或一个字符串。如果stderr灭有被捕获的话,它的值就为None
    16 check_returncode(): 如果returncode是一个非0值,则该方法会抛出一个CalledProcessError异常
    View Code

    案列:

    1.用户通过网络连接上了你的这台电脑
    2.用户输入相应的命令 基于网络发送给了你这台电脑上某个程序
    3.获取用户命令 里面subprocess执行该用户命令
    4.将执行结果再基于网络发送给用户
    这样就实现 用户远程操作你这台电脑的操作

    1 while True:
    2     cmd = input('cmd>>>:').strip()
    3     import subprocess
    4     obj = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    5     # print(obj)
    6     print('正确命令返回的结果stdout',obj.stdout.read().decode('gbk'))
    7     print('错误命令返回的提示信息stderr',obj.stderr.read().decode('gbk'))
    View Code

     















  • 相关阅读:
    Oracle 自定义聚合函数
    PL/SQL Developer背景色设置
    Oracle 所有关键字查询视图 V$RESERVED_WORDS
    react创建ts项目
    chrome如何导出已经安装的扩展程序为.crx文件?
    If you would prefer to ignore this check, add SKIP_PREFLIGHT_CHECK=true to an .env file in your
    vue脚手架配置环境变量
    sourceTree系列二:创建分支,并推送到远程上
    sourceTree系列一:合并分支,把uat的代码合并到dev上
    如何在typescript中解决 error TS2451: Cannot redeclare block-scoped variable 'name'
  • 原文地址:https://www.cnblogs.com/zahngyu/p/11210165.html
Copyright © 2011-2022 走看看