• 末学者笔记--Python模块


    Python 常用模块

    一.yagmail模块                                                                   

    python标准库中发送电子邮件的模块比较复杂,因此,有许多开原的库提供了更加易用的接口来发送电子邮件,其中yagmail是一个使用比较广泛的开原项目,yagmail底层依然使用了smtplibemail模块,但是yagmail提供了更好的接口,并具有更好的易读性

    yagmail是开原项目,因此,在使用前需要安装

     

    ——>pip install yagmail

     

    import yagmail

     

    连接邮箱服务器
    yag = yagmail.SMTP(user='18618250232@163.com', password='abc123', host='smtp.163.com')
    发送邮件
    yag.send(to=['18618250232@163.com','18702510185@163.com'],subject='这是测试邮件标题', contents=['这是测试邮件的内容',r'C:UsersAdministrator.USER-20190512NQDesktopsed.txt'])
    断开连接
    yag.close()

     

    二.pymysql模块                                                                  

    #pymysql操作数据库

    import pymysql

    # 打开数据库连接

    db = pymysql.connect(host="192.168.254.24", user="root",

                         password="root", db="mysql", port=3306)

    # 使用cursor()方法获取操作游标

    cur = db.cursor()

    # 1.查询操作

    # 编写sql 查询语句  user 对应我的表名

    sql = "select host,user,password from user"

    try:

        cur.execute(sql)  # 执行sql语句

        results = cur.fetchall()  # 获取查询的所有记录

        for i in results:#遍历结果

            print(i)

    except Exception as e:

    raise e

    finally:

    db.close()  # 关闭连接

    三.configparse模块                                                                  

    1ConfigParser简介

    ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为sectionsection 下面为类似于key-value 的配置内容(与yum源文件类似

     

    [db]

    db_host = 127.0.0.1

    db_port = 69

    db_user = root

    db_pass = root

    host_port = 69

     

    [concurrent]

    thread = 10

    processor = 20

    括号“[ ]”内包含的为section。紧接着section 为类似于key-value options 的配置内容。

     

    2ConfigParser 初始化对象

    使用ConfigParser 首选需要初始化实例,并读取配置文件:

     

    import configparser
    config = configparser.ConfigParser()
    config.read("info.txt", encoding="utf-8")

     

    3ConfigParser 常用方法

    1、获取所用的section节点

     

    # 获取所用的section节点

    import configparser
    config = configparser.ConfigParser()
    config.read("ini", encoding="utf-8")
    print(config.sections())

     

    》》

    ['db', 'concurrent']

    》》

     

    2)、获取指定section options

    即将配置文件某个section key 读取到列表中:

     

    import configparser
    config = configparser.ConfigParser()
    config.read("ini", encoding="utf-8")
    r = config.options("db")
    print(r)

     

    》》

    ['db_host', 'db_port', 'db_user', 'db_pass', 'host_port']

    》》

     

    3、获取指点section下指点option的值

     

    import configparser
    config = configparser.ConfigParser()
    config.read("ini", encoding="utf-8")
    r = config.get("db", "db_host")
    print(r)

    》》

    127.0.0.1

    》》

     

    # r1 = config.getint("db", "k1") #将获取到值转换为int

    # r2 = config.getboolean("db", "k2" ) #将获取到值转换为bool

    # r3 = config.getfloat("db", "k3" ) #将获取到值转换为浮点型

     

    4、获取指点section的所用配置信息

     

    import configparser
    config = configparser.ConfigParser()
    config.read("ini", encoding="utf-8")
    r = config.items("db")
    print(r)

    》》

    [('db_host', '127.0.0.1'), ('db_port', '69'), ('db_user', 'root'), ('db_pass', 'root'), ('host_port', '69')]

    》》

     

    5、修改某个option的值,如果不存在则会出创建

     

    # 修改某个option的值,如果不存在该option 则会创建

    import configparser
    config = configparser.ConfigParser()
    config.read("ini", encoding="utf-8")
    config.set("db", "db_port", "50")   #修改db_port的值为69

    config.set("db", "db_name", "database")   #没有则创建新的
    config.write(open("ini", "w"))   #写入文件

     

    6)、检查sectionoption是否存在,bool

    import configparser

    config = configparser.ConfigParser()

    config.has_section("section")    #是否存在该section

    config.has_option("section", "option")  #是否存在该option

     

    res = config.has_section('fengzi111')
    print(res)

    》》

    False

    》》

     

    res = config.has_option("db", "db_port")
    print(res)

    》》

    True

    》》

     

    7、添加section option

     

    import configparser

    config = configparser.ConfigParser()

    config.read("ini", encoding="utf-8")

    if not config.has_section("default"):  # 检查是否存在section
        config.add_section("default")

    if not config.has_option("default", "db_host"):  # 检查是否存在该option
        config.set("default", "db_host", "1.1.1.1")

    config.write(open("ini", "w"))

     

    8、删除section option

    import configparser
    config = configparser.ConfigParser()
    config.read("ini", encoding="utf-8")
    config.remove_section("default")   #整个section下的所有内容都将删除
    config.write(open("ini", "w"))

     

    9、写入文件

     

    以下的几行代码只是将文件内容读取到内存中,进过一系列操作之后必须写回文件,才能生效。

    import configparser

    config = configparser.ConfigParser()

    config.read("ini", encoding="utf-8")

    写回文件的方式如下:(使用configparserwrite方法)

     

    config.write(open("ini", "w"))

     

    四.paramiko模块                                                                

    1.概念:

    在ansible里有模块:

         yaml

         paramiko

         jinja2

    # import paramiko

    作用:实现python远程操作Linux系统,类似x-shell

     

    2.通过paramiko模块连接主机运行bash命令

     

    import paramiko

    ssh = paramiko.SSHClient()   #模块实例化
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())   #自动添加传输协议
    cmd = input('==>:')

    ssh.connect(hostname='192.168.254.10',port=22,username='root',password='root')   #添加主机信息
    stdin, stdout, stderr = ssh.exec_command(cmd)   #远程执行命令的标准输入、输出、错误(顺序最好不要出错)
    print(stdout.read().decode('utf-8'))

    print(stderr.read().decode('utf-8'))

     

     

    3.通过paramiko模块连接主机上传

    import paramiko
    hostname = '192.168.254.24'
    port = 22

    username = 'root'
    password = 'root'
    t=paramiko.Transport((hostname,port))

    t.connect(username=username,password=password)
    sftp = paramiko.SFTPClient.from_transport(t)
    sftp.put(r'C:UsersadministratorDesktopLinux.xmind', '/root/aaa.xmind')
    sftp.close()

     

     

    4.通过paramiko模块连接主机下载

    import paramiko
    hostname = '192.168.254.24'
    port = 22

    username = 'root'
    password = 'root'
    t=paramiko.Transport((hostname,port))

    t.connect(username=username,password=password)
    sftp = paramiko.SFTPClient.from_transport(t)
    sftp.get('/root/test3.yml', r'C:UsersadministratorDesktop est3.yml')
    sftp.close()

     

    5.<<利用paramiko模块配置lvs


    import paramiko

    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    def master():
        cmd = [
            'yum install ipvsadm -y',
            'ipvsadm -C',
            'ipvsadm -A -t 192.168.254.250:80 -s rr',
            'ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.18:80 -g',
            'ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.19:80 -g',
            'ifconfig ens33:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up',
            'route add -host 192.168.254.250 dev ens33:0'
        ]

        ssh.connect(hostname='192.168.254.17', port=22, username='root', password='123')
        for i in cmd:
            stdin, stdout, stderr = ssh.exec_command(i)
            print(stdin.read().decode('utf-8'))
            print(stderr.read().decode('utf-8'))

    def client(x):
        cmd1 = [
            'ifconfig lo:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up',
            'route add -host 192.168.254.250 dev lo:0',
            'echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore',
            'echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce',
            'echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore',
            'echo "2">/proc/sys/net/ipv4/conf/all/arp_announce'
        ]

        ssh.connect(hostname='192.168.254.%s' % x, port=22, username='root', password='123')
        for i in cmd1:
            stdin, stdout, stderr = ssh.exec_command(i)
            print(stdin.read().decode('utf-8'))
            print(stderr.read().decode('utf-8'))

    def main():
        master()
        client(18)
        client(19)
    if __name__ == '__main__':
        main()

    五.socket模块                                                                       

    作用:利用ip地址和端口号来进行通信的模块

     

    import socket
    hosts = ['192.168.254.10:22','192.168.254.12:22','192.168.254.132:222','192.168.254.11:22']
    for host in hosts:
        server = socket.socket()
        server.settimeout(1)   #设置超时时间
        ip = host.split(':')[0]

        port = host.split(':')[1]
        res = server.connect_ex((ip,int(port)))  #端口应该为整型,需加int;联通了有返回值‘0’,未通返回值不为0
        if res == 0:

            print('%s正常' % ip)
        else:
            print('%s不正常' % ip)

     

    六.Psutil模块                                                                          

    作用:监控系统资源(cpu,硬盘,内存)

    需要下载:pip in install psutil

     

    使用:

    import psutil

    内存使用情况
    mem = psutil.virtual_memory()
    print(mem)
    print(mem[1])  #默认为列表格式,可截取下标为1的值

    cpu使用率

    cpu = psutil.cpu_percent(1)  #一秒内cpu的占用率
    print(cpu)


    硬盘使用情况
    disk = psutil.disk_usage('C:')   #查看c盘使用情况
    print(disk)


    定义函数本着一各原则:尽量一个动作一个函数

    七.os模块                                                                                 

    【作用】:

    与本机系统交互的模块;在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路径进行操作,这就依赖于os模块,所以今天整理下比较常用的几个方法。网上这方面资料也很多,每次整理,只是对自己所学的知识进行梳理,从而加深对某个模块的使用。

    1getcwd()

    获取当前工作路径

    import os
    print(os.getcwd())

    >>

    E:untitledvenv课程文件

    >>

     

    2chdir() 改变当前工作路径

    import os
    print(os.getcwd())
    os.chdir(r"E:untitledvenvLib")
    print(os.getcwd())

    >>

    E:untitledvenv课程文件

    E:untitledvenvLib

    >>

     

    3、返回上级目录用..

    import os
    print(os.getcwd())
    os.chdir("..")
    print(os.getcwd())

    》》

    E:untitledvenv课程文件

    E:untitledvenv

    》》

     

    4makedirs(可以建递归的目录)

    新建文件夹

    import os
    os.makedirs("test/test1")   #相对路径创建递级目录
    os.chdir("test/test1")

    print(os.getcwd())

    》》

    E:untitledvenv课程文件 est est1

    》》

     

    5mkdir 新建目录,只能建一层

    import os
    os.makedirs("test1")   #相对路径创建递级目录
    os.chdir("test")

    print(os.getcwd())

    》》

    E:untitledvenv课程文件 est

    》》

     

    6、rmdir 只能删除单级目录为空的文件夹

    import os
    os.rmdir("test")

     

    7listdir 列出指定文件夹下面所有的文件夹和文件包括隐藏文件,以列表方式打印出来

    import os
    print(os.listdir(r"E:untitledvenvLib"))

    》》

    ['site-packages', 'tcl8.6']

    》》

     

    8remove删除指定的一个文件

    import os

    os.remove("test/test.py")

     

    9rename 修改文件夹名字或者是文件名字都可以

    import os

    os.rename("test","feige")

     

    10stat 查看一个文件的详细信息

    import os

    print(os.stat("gouguoqinew/testnew"))

     

    》》

    os.stat_result(st_mode=33206, st_ino=15085150720, st_dev=75373296, st_nlink=1, st_uid=0, st_gid=0, st_size=28, st_atime=1528473600, st_mtime=1528552906, st_ctime=1528552713)

    》》

     

    st_size=28    文件大小,单位是字节

     

    st_atime=1528473600  用户上一次的访问时间

     

    st_mtime=1528552906  用户上一次修改的时间(常用)

     

    st_ctime=1528552713   用户的创建文件的时间

     

    这个时间是时间戳,想要转换成我们能看懂的那种格式,还得转换下,比如用户创建文件时间是1528552713 转换为字符串时间

     

    11system 运行shell命令,直接显示结果

    # system:在本机终端输入命令‘ ’
    os.system('ipconfig')  #其既有输出结果且有返回值,成功执行即返回‘0’,失败返回非零;跟Linux中echo $? 有点像
    res = os.system('ipconfig')

    print(res)

     

    12os.path.exists 判断路径是否存在,存在为True,不存在为False

    import os

    print(os.path.exists("D:pyprojectday21模块gouguoqinew"))

     

    》》

    True

    》》

     

    13、os.path.isfile 判断一个文件是否存在,存在为True,否则为False

    import os

    print(os.path.isfile(r"D:pyprojectday21模块gouguoqinew est.py"))

    》》

    True

    》》

     

    14os.path.isdir 判断一个目录是否存在,存在为True,否则为False

    import os

    print(os.path.isdir(r"D:pyprojectday21模块gouguoqinew"))

    》》

    True

    》》

     

    15os.path.join 路径拼接(重要常用)

    import os
    a="D:pyproject"
    b="day21模块gouguoqinew"
    print(os.path.join(a,b))

     

    》》

    D:pyprojectday21模块gouguoqinew

    》》

     

     ========================================分割线===================================

  • 相关阅读:
    (Java实现) 洛谷 P1106 删数问题
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1106 删数问题
    目测ZIP的压缩率
  • 原文地址:https://www.cnblogs.com/feige2L/p/11026928.html
Copyright © 2020-2023  润新知