• 常用模块


    常用模块

    什么是模块 

    在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码会越来越长,越来越不容易维护。

    为了编写可维护的代码,我们把很多的函数分组,分别放到不同的文件里,这样每个文件包含的代码就相对较少了,很多编程语言都采用了这种组织代码的方式。在Python中,一个.py文件就可以称之为一个模块 module

    模块分为三种:

    内置标准模块(又称标准库),执行help(‘modules‘) 查看所有Python自带模块列表

    第三方开源模块,可通过pip install 模块名    联网安装

    自定义模块,自己写的模块

     

    模块 导入&调用 

    Import module  # 导入
    
     
    
    import os ,sys
    
    print(os.path)
    from os import path     #直接导入path模块,直接使用path,无需os.path
    print(path)
    
     
    
    
    from asyncio.events import get_event_loop as get_events     #as想当于重命名
    print(get_events())
    模块导入

    自定义模块

    Module_custom.py
    
     
    
    name = 'alex'
    print('hello',name)
    
    def sayhi(n):
        print('hi',n)
    
    Module_importcustom.py
    
    import Modules.Module_custom as name
    
    
    name.sayhi('jack')
    DIY模块

    安装第三方模块

    开源的Python镜像网站  

    pypi.org

    pypi.douban.com/simple     豆瓣的使用方法 pip install -i http://pypi.douban.com/simple/ paramiko

    import paramiko
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('10.3.10.241',22,'deepin','deepin1')
    
    stdin,stdout,stderr = ssh.exec_command('ip add')
    print(stdout.read().decode('utf-8'))
    ssh.close()
    paramiko

     

    Sys、os模块的使用

    # -*- coding:utf-8 -*-
    import os
    print(__file__)   # 打印一个当前脚本的路径
    print(os.getcwd())    # 获取当前脚本的目录pwd
    print(os.listdir("/tmp"))   #、获取/tmp目录下的文件
    
    os.path.isfile('/tmp/abc')  # 判断/tmp/abc 是否是一个文件
    os.path.isdir('/tmp')  # 判断/tmp 是否是一个目录
    
    os.path.isabs('~/ccn')         #判断一个文件是不是绝对路径
    os.path.split("/tmp/abc")  # 提取出目录名,文件名  分开显示
    os.path.dirname("/tmp/abc")  # 只获取目录名 ,不获取文件名
    
    os.path.abspath("~/ccn")    #获取绝对路径
    
    os.stat("/tmp")   # 获取/tmp文件属性  相当于 linux下的stat
    os.chmod('/tmp')   #修改/tmp权限  相当于linux下chmod功能一样
    
    os.kill(123,9)     #杀死相关进程 前边是进程号 后边是kill的信号 相当于linux下的kill -9
    OS模块的常用方法
    import sys
    sys.argv   # 命令行参数list ,第一个元素是程序本身路径
    sys.exit(0)   # 退出程序 ,正常退出时exit(0)
    sys.version  # 获取Python解释程序的版本信息
    sys.maxint   # 最大的int值
    sys.path      #返回模块Module的搜索路径
    sys.platform  #返回操作系统平台的名称
    
    sys.getrecursionlimit()   # 获取最大递归层数  default 100
    sys.setrecursionlimit(1500)     #设置最大递归层数 1500
    
    sys.getdefaultencoding()   #获取解释器 使用的默认编码 utf8
    sys.getfilesystemencoding()  # 获取数据存储到文件里的默认编码  utf8
    sys模块常用方法

    时间模块

    时间处理归为三种:

    时间的显示 , 在屏幕显示、记录日志等

    时间的转换 , 比如把字符串格式的日期转换成Python中的日期类型

    时间的运算,计算两个日期间的差值等

    time模块

    1.时间戳 ,表示的1970年1月1日0.0.0分

    2.格式化的时间字符串,比如’2020-10.03 10:00’

    3.元祖共九个元素,由于Python的time模块实现主要调用的c库,平台上不一样

    UTF 时间

    UTF世界标准时间, 中国为UTF+8,又称东8区

    time模块的方法(以上都可以传时间秒数的参数,如果不传默认使用的是系统的时间戳)

    Time.localtime()  # 将秒数转化成 年的方法-  正常显示的时间

    Time.getime()    # 将时间转换成世界时间

    Time.mktime()    # 将时间时间转化成时间戳(秒数)

    Time.sleep()    # 延时五分钟

    time.asctime()  #把一个表示时间的元祖或者世界时间表示为这种形式:Fri Mar 27 22:46:17 2020

    Time.ctime()    #把一个时间戳转换成time.asctime()的形式

    Time.strftime()  #  将时间转换成你想要的字符串格式  print(time.strftime("%Y-%m-%d",time.localtime()))

    Time.strptime()      #将字符串格式转换成日期print(time.strptime("2020.1.2 10:10","%Y.%m.%d %H:%M"))

    Datetime 模块

    Datetime模块定义了下面的这几类:

    Datetime.data 表示日期的一个类

    datetime.date.today()

    datetime.date(2020, 3, 27)

    datetime.date.fromtimestamp(1222222222)      #将时间戳转换成时间

    datetime.date(2008, 9, 24)

    Datetime.time  表示时间的类

    Datetime.datetime 表示日期时间的类型

    datetime.datetime.now()

    datetime.datetime(2020, 3, 27, 23, 5, 37, 909430)

    datetime.datetime.fromtimestamp(123455)

    datetime.datetime(1970, 1, 2, 18, 17, 35)

    t1 = datetime.datetime.now()

    t1 - datetime.timedelta(days=3)

    datetime.datetime(2020, 3, 24, 23, 8, 55, 386942)

    datetime.datetime.now().replace(year=20,month=10,day=5,minute=1,hour=1)

    datetime.datetime(20, 10, 5, 1, 1, 31, 412669)

    Pytz模块

    Pytz.alltimezones  查看所有时区

    Datetime.datetime.now(tz = pytz.timezone(“Africa/Abidjan”))

    Random随机数模块

    # -*- coding:utf-8 -*-
    
    import random
    
    import string
    
    print(random.randrange(1,10))    # 返回1-10之间的一个随机数,不包括10
    print(random.randint(1,10))   # 返回1-10之间的一个随机数,包括10
    
    print(random.random())    # 返回一个随机浮点数,小数
    print(random.choice('qwrrqtyeywy'))   #返回给定字符串中的随机一个字符
    
    print(random.sample('3143445sfwrqrt',4))  #返回给定字符串中,4个随机字符,以列表形式显示
    
    
    print("".join(random.sample(string.digits+string.ascii_lowercase+string.ascii_uppercase,4)))   # 生成随机4位验证码
    
    a = list(string.digits+string.ascii_lowercase+string.ascii_uppercase)    #洗牌将数字大小写英文 使用shuffle打乱顺序
    random.shuffle(a)
    print(a)
    Random 模块

    序列化pickle & json模块

    Pickle          ----pickle 可以多次dump 多次load  但建议只一次

    # -*- coding:utf-8 -*-
    
    import pickle
    
    d = {
        "name":"alex",
        "role":"police",
        "blood":"76",
        "weapon":"AK47"
    }
    arrive_players = ["alex","jack","rain" ]
    
    
    # d_dump = pickle.dumps(d)  # dumps叫做序列化,将不同的数据类型,转换成bytes格式,存入硬盘
    # print(d_dump)
    #
    # print(pickle.loads(d_dump)) #loads叫做反序列化,将bytes字节类型转换成相应的数据类型
    #
    
    f = open("game.pkl","wb")   #存入的是16进制数,所以用wb格式
    pickle.dump(d,f)     # pickle.dump 方法直接可以序列化的存入文件内
    
    pickle.dump(arrive_players,f)
    
    f = open("game.pkl","rb")    # 因为存入的是进制数,所以取也要用rb模式取
    print(pickle.load(f))       # pickle.load将序列化的数据读取出来,序列化了几次就要取几次
    print(pickle.load(f))

    # dump是写入文件,dumps是在内存中生成序列化的字符串
    # load从文件加载,反序列化, loads把序列化的字符串反向解析  建议只dump一次,否则程序多会乱

    Json    ------json 一个文件只能一次dump ,一次load

    import json
    
    d = {
        "name":"alex",
        "role":"police",
        "blood":"76",
        "weapon":"AK47"
    }
    arrive_players = ["alex","jack","rain" ]
    
    #print(json.dumps(d))
    f = open("game.json",'w')
    json.dump(d,f)
    #json.dump(arrive_players,f)
    
    
    f = open("game.json",'r')
    print(json.load(f))

    Pickle 和 json的区别

    Pickle只支持python,支持所有的数据类型  时间都可以

    json 支持所有变成语言 .只支持常规的数据类型str . int .dict.set . list .tuple

     

    Hashlib加密模块

    Md5功能 

    输入任意长度的信息,经过处理,输出为128位的信息(数字指纹):

    不同的输入得到的不同的结果(唯一性)

    Md5算法的特点

    1. 压缩性:任意长度的数据,算出的md5值的长度都是固定的.

    2. 容易计算:从元数据计算出md5值很容易

    3. 抗修改性:对源数据进行任何改动,修改一个字节生成的md5值区别也很大

    4. 强抗碰撞: 已知原数据和md5,想找到一个具有相同md5值的数据(即伪造数据)是非常困难的.

    Md5算法是否可逆

    Md5不可逆的原因是一种散列函数,使用的hash算法,在计算过程中原文的部分信息是丢失了的.

    Md5的用途

    1. 防止被篡改

    2. 防止直接看到明文

    3. 防止抵赖(数字签名)

    import hashlib
    
    m = hashlib.md5()
    m.update(b"hello alex")
    print(m.hexdigest())
    m.update("房纠纷解决".encode("utf8"))
    
    #print(m.digest())
    print(m.hexdigest())

    Hashlib -- sha加密算法

    s1 = hashlib.sha1()

    s1.update('发发发'.encode("utf-8"))

    s1.hexdigest()

    '22b90f88377478e852388db42b707488ed8cf3c9'

    s2 = hashlib.sha3_256()

    s2.update("嘻嘻".encode("utf-8"))

    s2.hexdigest()

    'd3b4813643938fb3cf57b775c947dd638b59f60bcc9258ed400b6e0fbbf5a925'

    文件copy模块shutil

    import shutil
    
    shutil.copyfileobj(open("game.json"),open("game2.json",'w'))
    
    shutil.copyfile("game.json","game3.json")
    
    shutil.copymode()   #仅copy权限,内容组用户均不变 不会copy内容,目标文件必须存在
    
    shutil.copystat()   #仅copy状态的信息 mtime ctime atime,不会copy内容,目标文件必须存在
    
    shutil.copy()     #copy权限和内容
    
    shutil.copy2()    # copy权限和状态的信息  
    
    shutil.copytree()    #copy整个目录
    
    shutil.copytree("../Modules","Modules_cpoy",ignore=shutil.ignore_patterns("*.py","*.pkl"))  # ignore排除相应文件进行copy
    
    shutil.rmtree()   # 删除文件
    
    shutil.move()    #移动文件
    
    
    
    shutil.make_archive(base_name="/tmp/code.bak",format="zip",root_dir="../Modules",owner="root")       #创建压缩包

    Zipfile 压缩模块

    import zipfile
    import os
    z = zipfile.ZipFile("/tmp/test_copy.zip","w")  #压缩
    filelist = []
    
    for root_dir,dirs,files in os.walk("../Modules"):  #.代表当前目录
        for name in files:
            filelist.append(os.path.join(root_dir,name))
    for i in filelist:
        print(i)
        z.write(i)
    z.close()
    
    
    z = zipfile.ZipFile("/tmp/test_copy.zip",'r')   #解压
    z.extractall(path="/root")
    z.close()

    牛逼的Re正则模块

    Re.match   从头开始匹配
    
    Re.findall   匹配所有值  匹配出所有的值以列表返回
    
    Re.search   包含匹配 匹配出来第一个就返回
    
    Re.split  以匹配到的字符当做列表分隔符 re.split("[0-9]","alex3jack4rain5mack") ['alex', 'jack', 'rain', 'mack']
    
    Re.sub  匹配字符并替换 re.sub("abc","ABc","abcabcerrr")   'ABcABcerrr'
    
    re.sub("abc","ABc","abcabcerrr",count=1)  'ABcabcerrr'
    
    Re.fullmatch j精确匹配
    
    re.fullmatch("abc","abc")  相当于re.search("^abc$",”abc”)

    '.'  匹配任意除 之外的任意字符

    '^' 匹配开头

    $' 匹配结尾

    '*'  匹配前一个字符0次或多次

    '+' 匹配前一个字符1次或多次

    '?' 匹配前一个字符0次或1次

    '{m}' 匹配前一个字符m次

    '{n,m}' 匹配前一个字符n次到m次

    '{|}'  匹配或

    '{}'分组匹配 re.search(“(abc){1}a(123|45)”,”abcabca12345”)

    A'只从字符开头匹配

    ' 相当于$ 匹配字符结尾 re.search("Aabc","abc")  只能是abc

    []      re.search("[a-zA-z0-9]{11}","131414fsq3144f")

    d'  匹配数字0-9  re.search("d+","d3425")  +一次或多次 ?一次或0次 0一次或多次

    D'  匹配非数字   re.findall("D+","1324fs1sadf31fds")

    w'  re.search("w+","123qrt135")   匹配[a-zA-z0-9]

    W'  匹配非[a-zA-z0-9] 

    s'匹配 空白字符 

    a= re.search("(?P<province>[0-9]{3})(?P<city>[0-9]{3})(?P<birt>[0-9]{4})",id_num)

    a.group()

    '1504301998'

    a.groups()

    ('150', '430', '1998')

    a.groupdict() re.split("[0-9]","alex3jack4rain5mack")

    ['alex', 'jack', 'rain', 'mack']

    {'province': '150', 'city': '430', 'birt': '1998'}

    Re.compile  制定匹配规则 ,直接拿来用.适合非常大的数据量,匹配规则还是一样的

    p = re.compile("w{11}")

    p.search("1234567892134658")

    <re.Match object; span=(0, 11), match='12345678921'>

    Flags 标志符

    re.search("elf","alexrwfElf",re.I)   re.I忽略大小写

    re.search("^alex"," alexjackrain",re.M)

    <re.Match object; span=(1, 5), match='alex'>   re.M多行模式 search只搜索第一行

    re.search("."," ",re.S)       re.S 可以匹配

    软件项目的目录设计规范

    目的:

    1. 可读性高 

    2. 可维护性高

    Bin/ 存放项目的一些可执行文件 脚本之类的

    Docs/存放,使用的文档

    Conf/ 存放配置文件

    Setup.py  安装 部署 打包的脚本

    Requirements.txt 存放软件依赖的外部python包列表 自动生成这个文件 pip freeze > requirements.txt   使用这个文件 pip install -r requirements.txt

    README  项目说明文件

    Bin/ 存放项目的一些可执行文件 脚本之类的

    Test/  存放目录的源代码

    Docs/存放,使用的文档

    Conf/ 存放配置文件

    Setup.py  安装 部署 打包的脚本

    Requirements.txt 存放软件依赖的外部python包列表 自动生成这个文件 pip freeze > requirements.txt   使用这个文件 pip install -r requirements.txt

    README  项目说明文件

    包&跨模块代码调用

    >>> import mypackage

    ------welcome invoke my first package

    >>> from mypackage import fir

    哈哈

  • 相关阅读:
    Selenium IDE的第一个测试用例——路漫长。。。
    selenium学习第三天,新建一个测试用例(运行失败)。
    Selenium学习第二天,了解Selenium工作模式与学习Selenium需要具备的知识与工具。
    了解Selenium与自动化测试第一天“云里雾里”
    javascript冷知识
    HTTP权威指南学习心得
    (六)Linux进程调度-实时调度器_学习笔记
    (五)Linux进程调度-CFS调度器_学习笔记
    (四)Linux进程调度-组调度及带宽控制_学习笔记
    (三)Linux进程调度器-进程切换_学习笔记
  • 原文地址:https://www.cnblogs.com/zjaiccn/p/12910126.html
Copyright © 2020-2023  润新知