• Python常用模块学习


    模块,用一砣代码实现了某个功能的代码集合,模块是一系列常用功能的集合体,一个py文件就是一个模块。

    类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。

    如:os 是系统相关的模块;file是文件操作相关的模块

    模块分为三种:

    • 自定义模块(我们自己写的)
    • 内置模块(python解释器自带)
    • 开源模块(别人写的)

    自定义模块

    当程序比较庞大的时候,你的项目不可能只在一个py中那么当多个文件中都需要使用相同的方法的时候 可以将该公共的方法写到一个py文件中其他的文件以模块的形式导过去直接调用即可。

    开源模块

    一、下载安装

    下载安装有两种方式:

    方式1
    yum 
    pip
    apt-get
    ...
    
    方式2
    下载源码
    解压源码
    进入目录
    编译源码    python setup.py build
    安装源码    python setup.py install
    

    注:在使用源码安装时,需要使用到gcc编译和python开发环境,所以,需要先执行:

    yum install gcc
    yum install python-devel
    或
    apt-get python-dev
    

    安装成功后,模块会自动安装到 sys.path 中的某个目录中,如:

    1:/usr/lib/python2.7/site-packages/
    

    二、导入模块

    模块 paramiko

    paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。

    1、下载安装

    pip3 install paramiko
    

    # pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto
     
    # 下载安装 pycrypto
    wget http://files.cnblogs.com/files/wupeiqi/pycrypto-2.6.1.tar.gz
    tar -xvf pycrypto-2.6.1.tar.gz
    cd pycrypto-2.6.1
    python setup.py build
    python setup.py install
     
    # 进入python环境,导入Crypto检查是否安装成功
     
    # 下载安装 paramiko
    wget http://files.cnblogs.com/files/wupeiqi/paramiko-1.10.1.tar.gz
    tar -xvf paramiko-1.10.1.tar.gz
    cd paramiko-1.10.1
    python setup.py build
    python setup.py install
     
    # 进入python环境,导入paramiko检查是否安装成功
    

    2、paramiko模块的使用

    执行命令 - 通过用户名和密码连接服务器

    #!/usr/bin/env python
    #coding:utf-8
    
    import paramiko
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('192.168.1.108', 22, 'alex', '123')
    stdin, stdout, stderr = ssh.exec_command('df')
    print stdout.read()
    ssh.close();
    

    执行命令 - 过密钥链接服务器

    import paramiko
    
    private_key_path = '/home/auto/.ssh/id_rsa'
    key = paramiko.RSAKey.from_private_key_file(private_key_path)
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('主机名 ', 端口, '用户名', key)
    
    stdin, stdout, stderr = ssh.exec_command('df')
    print stdout.read()
    ssh.close()
    

    上传或下载文件 - 通过密钥

    import paramiko
    
    pravie_key_path = '/home/auto/.ssh/id_rsa'
    key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
    
    t = paramiko.Transport(('182.92.219.86',22))
    t.connect(username='wupeiqi',pkey=key)
    
    sftp = paramiko.SFTPClient.from_transport(t)
    sftp.put('/tmp/test3.py','/tmp/test3.py') 
    
    t.close()
    
    import paramiko
    
    pravie_key_path = '/home/auto/.ssh/id_rsa'
    key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
    
    t = paramiko.Transport(('182.92.219.86',22))
    t.connect(username='wupeiqi',pkey=key)
    
    sftp = paramiko.SFTPClient.from_transport(t)
    sftp.get('/tmp/test3.py','/tmp/test4.py') 
    
    t.close()
    

    内置模块

    一、os

    用于提供系统级别的操作

    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
    os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
    os.curdir  返回当前目录: ('.')
    os.pardir  获取当前目录的父目录字符串名:('..')
    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.sep    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    os.linesep    输出当前平台使用的行终止符,win下为"	
    ",Linux下为"
    "
    os.pathsep    输出用于分割文件路径的字符串
    os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
    os.system("bash command")  运行shell命令,直接显示
    os.environ  获取系统环境变量
    os.path.abspath(path)  返回path规范化的绝对路径
    os.path.split(path)  将path分割成目录和文件名二元组返回
    os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
    os.path.basename(path)  返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素
    os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
    os.path.isabs(path)  如果path是绝对路径,返回True
    os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
    os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
    os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
    os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
    os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
    

    二、sys

    用于提供对解释器相关的操作

    ys.argv           命令行参数List,第一个元素是程序本身路径
    sys.exit(n)        退出程序,正常退出时exit(0)
    sys.version        获取Python解释程序的版本信息
    sys.maxint         最大的Int值
    sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    sys.platform       返回操作系统平台名称
    sys.stdout.write('please:')
    val = sys.stdin.readline()[:-1]
    

    三、json 和 pickle

    用于序列化的两个模块

    json,用于字符串 和 python数据类型间进行转换
    pickle,用于python特有的类型 和 python的数据类型间进行转换

    Json模块提供了四个功能:dumps、dump、loads、load

    pickle模块提供了四个功能:dumps、dump、loads、load

    四、 ConfigParser

    configparser模块主要用于读取配置文件,导入方法:import configparser

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 import configparser
     5 
     6 con = configparser.ConfigParser()
     7 #con对象的read功能,打开文件读取文件,放进内存
     8 con.read("default.txt", encoding='utf-8')
     9 
    10 #1、con对象的sections,内存中所有的节点
    11 result = con.sections()
    12 print("所有的节点:", result)
    13 
    14 #2、获取指定节点下的所有键值对
    15 con_items = con.items("first")
    16 print('first下所有的键值对:', con_items)
    17 
    18 #3、获取指定节点下的所有键
    19 ret = con.options("second")
    20 print('second下的所有键:', ret)
    21 
    22 #4、获取指定节点下指定的key的值
    23 v = con.get("second", 'age')
    24 print('second节点下age的值:', v)
    25 
    26 #5、检查、删除、添加节点
    27 #5.1检查是否存在指定的节点,返回True为存在,False为不存在
    28 has_con = con.has_section("first")
    29 print('是否已存在first节点:', has_con)
    30 #5.2添加节点
    31 con.add_section("SEC-1")
    32 #con.write(open('default.txt', 'w'))
    33 #5.3删除节点
    34 con.remove_section("SEC-1")
    35 #con.write(open('default.txt', 'w'))
    36 
    37 #6、检查、删除、设置指定组内的键值对
    38 #6.1检查
    39 has_opt = con.has_option('second', 'age')
    40 print(has_opt)
    41 #6.2删除
    42 con.remove_option('second', 'age')
    43 #6.3设置
    44 con.set('second', 'name', "june_liang")
    45 #对configparser对象执行的一些修改操作,必须重新写回到文件才可生效
    46 con.write(open('default.txt', 'w'))
    

    五、logging

    日志是一种可以追踪某些软件运行时所发生事件的方法。软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情。一个事件可以用一个可包含可选变量数据的消息来描述。此外,事件也有重要性的概念,这个重要性也可以被称为严重性级别(level)。

    日志的等级

    我们先来思考下下面的两个问题:

    作为开发人员,在开发一个应用程序时需要什么日志信息?在应用程序正式上线后需要什么日志信息?
    作为应用运维人员,在部署开发环境时需要什么日志信息?在部署生产环境时需要什么日志信息?
    在软件开发阶段或部署开发环境时,为了尽可能详细的查看应用程序的运行状态来保证上线后的稳定性,我们可能需要把该应用程序所有的运行日志全部记录下来进行分析,这是非常耗费机器性能的。当应用程序正式发布或在生产环境部署应用程序时,我们通常只需要记录应用程序的异常信息、错误信息等,这样既可以减小服务器的I/O压力,也可以避免我们在排查故障时被淹没在日志的海洋里。那么,怎样才能在不改动应用程序代码的情况下实现在不同的环境记录不同详细程度的日志呢?这就是日志等级的作用了,我们通过配置文件指定我们需要的日志等级就可以了。

    不同的应用程序所定义的日志等级可能会有所差别,分的详细点的会包含以下几个等级:

    • DEBUG
    • INFO
    • NOTICE
    • WARNING
    • ERROR
    • CRITICAL
    • ALERT
    • EMERGENCY
    日志字段信息与日志格式
    • 事件发生时间
    • 事件发生位置
    • 事件的严重程度--日志级别
    • 事件内容
    import logging,time,os,sys
    
    #路径加载
    pro_path= os.path.dirname(os.getcwd())  #加载上一层目录
    sys.path.append(pro_path)
    log_path = os.path.join(pro_path,"log")
    
    #日志函数
    def get_log():
        log_file= log_path
        m_date = time.strftime('%Y%m%d', time.localtime(time.time()))
        if not os.path.isdir(log_file):
            os.mkdir(log_file)
        logfile_path=os.path.join(log_file,m_date+'.log')
    #创建日志对象
        logger=logging.getLogger()
    #设置日志等级
        logger.setLevel("DEBUG")
    #创建文件输出
        log=logging.FileHandler(logfile_path)
    #日志格式
        log_format=logging.Formatter("%(asctime)s %(levelname)s : %(message)s")
    #为文件绑定日志格式
        log.setFormatter(log_format)
        logger.addHandler(log)
        return  logger
    
  • 相关阅读:
    JSTL标签库
    JavaScript中数组操作
    jquery . fancybox()
    jQuery ajax
    jquery学习笔记2
    codeforces_1066_B.Heaters
    codeforces_1065_D.three pieces_思维
    codeforces_B. Forgery
    codeforces_C. Sequence Transformation
    codeforces_D. Social Circles
  • 原文地址:https://www.cnblogs.com/Alicebat/p/12167352.html
Copyright © 2020-2023  润新知