zoukankan      html  css  js  c++  java
  • 末学者笔记--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

    》》

     

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

  • 相关阅读:
    JDK源码分析之hashmap就这么简单理解
    JVM笔记11-类加载器和OSGI
    JVM笔记10-性能优化之高级特性
    Java并发编程笔记之ThreadLocal内存泄漏探究
    Java并发编程笔记之FutureTask源码分析
    Java并发编程笔记之SimpleDateFormat源码分析
    Java并发编程笔记之Timer源码分析
    Java并发编程笔记之Semaphore信号量源码分析
    Java并发编程笔记之CyclicBarrier源码分析
    Java并发编程笔记之 CountDownLatch闭锁的源码分析
  • 原文地址:https://www.cnblogs.com/feige2L/p/11026928.html
Copyright © 2011-2022 走看看