• Python模块(导入,内置,自定义,开源)


    目录:

    • 模块介绍

    • 自定义模块

    • 内置模块

    • 开源模块

    一、模块

    1.模块简介

    模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用python标准库的方法。

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

    2.模块的引入

    在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。在调用math模块中的函数时,必须这样引用:

    1
    2
    3
    4
    模块名.函数名
    例:
    import math
    import sys

    有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以通过语句

     from 模块名 import 函数名1,函数名2....

    例:

    1
    2
    3
    4
    5
    6
    7
    import module
    #从某个模块导入某个功能
    from module.xx.xx import xx
    #从某个模块导入某个功能,并且给他个别名
    from module.xx.xx import xx as rename 
    #从某个模块导入所有
    from module.xx.xx import *

    模块分为三种:

    • 自定义模块

    • 内置模块

    • 开源模块

    3.模块的安装

    (1)yum install 模块名

    (2)apt-get

    (3)pip安装 参考使用(点击

    pip3 install paramiko #paramiko 是模块名
    

      

    (4)源码安装

    1
    2
    3
    4
    5
    6
    需要编译环境:yum install python-devel gcc
    下载源码包:wget http://xxxxxxxxxxx.tar
    解压:tar -xvf xxx.tar
    进入:cd xxx
    编译:python setup.py build
    安装:python setup.py install

    二、自定义模块

    1.在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。

    例:

    写一个模块(模块文件要和代码文件在同一目录下)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #vim moudle_test.py
    #写入如下代码
    #!/usr/bin/env python3
    print ('自定义 moudle')
    #调用
    #vim test.py
    #!/usr/bin/env python3
    #导入自定义模块
    import moudle_test
    #执行test.py

    2.模块文件为单独文件夹 ,文件夹和代码在同一目录下

    __init__


    导入模块其实就是告诉Python解释器去解释那个py文件

    • 导入一个py文件,解释器解释该py文件

    • 导入一个包,解释器解释该包下的 __init__.py 文件

    3.sys.path添加目录

    如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径') 添加。
    通过os模块可以获取各种目录,例如:

     

    三、内置模块

    1.os模块 提供系统级别的操作

    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
    1
    2
    3
    >>> os.getcwd()
    '/root'
    >>>
    
    
    os.chdir("目录名")  改变当前脚本工作目录;相当于linux下cd命令
    1
    2
    3
    4
    >>> os.chdir('/usr/local')
    >>> os.getcwd()
    '/usr/local'
    >>>
    
    
    
    
    os.curdir 返回当前目录: ('.')
    1
    2
    >>> os.curdir
    '.'
    
    
    os.pardir  获取当前目录的父目录字符串名:('..')
    1
    2
    >>> os.pardir
    '..'
    
    
    os.makedirs('目录1/目录2') 可生成多层递归目录(相当于linux下mkdir -p)
    1
    2
    >>> os.makedirs('/python/moudle/')
    # ll /python/moudle/
    
    
    os.removedirs('目录') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
    1
    2
    3
    >>> os.removedirs('/python/moudle')
    #a目录中除了有一个b目录外,再没有其它的目录和文件。
    #b目录中必须是一个空目录。 如果想实现类似rm -rf的功能可以使用shutil模块
    
    
    os.mkdir('目录')  生成单级目录;相当于shell中mkdir 目录
    1
    >>> os.mkdir('/python')
    
    
    os.rmdir('目录')  删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir
    1
    2
    3
    4
    5
    >>> os.rmdir('/python')
    >>> os.rmdir('/python')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    FileNotFoundError: [Errno 2] No such file or directory: '/python'
    
    
    os.listdir('目录') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
    1
    2
    >>> os.listdir('/root')
    ['.Xauthority', 'yaoyao@192.168.42.51', '.py.swp', '.ssh', 'in.sh', '1', 'IPy-0.81.tar.gz', 'Dockerssh', 'id_rsa.pub', 'psutil-2.0.0.tar.gz', '.python_history', '.bashrc', 'ansible', '.bash_history', '.vim', 'IPy-0.81', '.pip', '.profile', '.ansible', 'python', '.dockercfg', 'Docker', 'util-linux-2.27', '.viminfo', 'util-linux-2.27.tar.gz', 'ubuntu_14.04.tar', '__pycache__', 'psutil-2.0.0', 'xx.py', 'ip.py', 'DockerNginx', '.cache', 'dict_shop.py']
    os.remove()删除一个文件
    1
    >>> os.remove('/root/xx.py')
    
    
    os.rename("原名","新名")  重命名文件/目录
    1
    2
    3
    4
    5
    >>> os.listdir('/python')
    ['oldtouch']
    >>> os.rename('oldtouch','newtouch')
    >>> os.listdir('/python')
    ['newtouch']
    
    
    os.stat('path/filename')  获取文件/目录信息
    1
    2
    >>> os.stat('newtouch')
    os.stat_result(st_mode=33188, st_ino=1048593, st_dev=51713, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1453442450, st_mtime=1453442450, st_ctime=1453442500)
    
    
    os.sep      输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    1
    2
    3
    >>> os.sep
    '/'
    >>>
    
    
    os.linesep 输出当前平台使用的行终止符,win下为"	
    ",Linux下为"
    "
    1
    2
    >>> os.linesep
    ' '
    
    
    os.pathsep    输出用于分割文件路径的字符串
    1
    2
    >>> os.pathsep
    ':'
    
    
    os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
    1
    2
    >>> os.name
    'posix'
    
    
    os.system("pwd")  运行shell命令,直接显示
    1
    2
    3
    >>> os.system('pwd')
    /python
    0

    os.environ

    1
    2
    >>> os.environ
    environ({'_': '/usr/bin/python3', 'SSH_CONNECTION': 省略n个字符

    os模块其他语法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    os.path模块主要用于文件的属性获取,
    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所指向的文件或者目录的最后修改时间
    
    
    

    2、sys模块 用于提供对解释器相关的操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    sys.argv   命令行参数List,第一个元素是程序本身路径
    sys.modules 返回系统导入的模块字段,key是模块名,value是模块
    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]
    sys.modules.keys() 返回所有已经导入的模块名
    sys.modules.values() 返回所有已经导入的模块
    sys.exc_info()     获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息
    sys.exit(n)        退出程序,正常退出时exit(0)
    sys.hexversion     获取Python解释程序的版本值,16进制格式如:0x020403F0
    sys.version        获取Python解释程序的
    sys.api_version    解释器的C的API版本
    sys.version_info
    ‘final’表示最终,也有’candidate’表示候选,serial表示版本级别,是否有后继的发行
    sys.displayhook(value)      如果value非空,这个函数会把他输出到sys.stdout,并且将他保存进__builtin__._.指在python的交互式解释器里,’_’ 代表上次你输入得到的结果,hook是钩子的意思,将上次的结果钩过来
    sys.getdefaultencoding()    返回当前你所用的默认的字符编码格式
    sys.getfilesystemencoding() 返回将Unicode文件名转换成系统文件名的编码的名字
    sys.setdefaultencoding(name)用来设置当前默认的字符编码,如果name和任何一个可用的编码都不匹配,抛出 LookupError,这个函数只会被site模块的sitecustomize使用,一旦别site模块使用了,他会从sys模块移除
    sys.builtin_module_names    Python解释器导入的模块列表
    sys.executable              Python解释程序路径
    sys.getwindowsversion()     获取Windows的版本
    sys.copyright      记录python版权相关的东西
    sys.byteorder      本地字节规则的指示器,big-endian平台的值是’big’,little-endian平台的值是’little’
    sys.exc_clear()    用来清除当前线程所出现的当前的或最近的错误信息
    sys.exec_prefix    返回平台独立的python文件安装的位置
    sys.stderr         错误输出
    sys.stdin          标准输入
    sys.stdout         标准输出
    sys.platform       返回操作系统平台名称
    sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    sys.maxunicode     最大的Unicode值
    sys.maxint         最大的Int值
    sys.version        获取Python解释程序的版本信息
    sys.hexversion     获取Python解释程序的版本值,16进制格式如:0x020403F0

    四、开源模块安装、使用

    https://pypi.python.org/pypi 是python的开源模块库,几乎涵盖了你想用python做的任何事情。 事实上每个python开发者,只要注册一个账号就可以往这个平台上传你自己的模块,这样全世界的开发者都可以容易的下载并使用你的模块。

    那如何从这个平台上下载代码呢?

    1.直接在上面这个页面上点download,下载后,解压并进入目录,执行以下命令完成安装

    编译源码    python setup.py build
    安装源码    python setup.py install

    2.直接通过pip安装

    pip3 install paramiko #paramiko 是模块名

    pip命令会自动下载模块包并完成安装。

    pip命令默认会连接在国外的python官方服务器下载,速度比较慢,你还可以使用国内的豆瓣源,数据会定期同步国外官网,速度快好多

    sudo pip install -i http://pypi.douban.com/simple/ paramiko --trusted-host pypi.douban.com   # paramiko 是模块名

    下载后,直接导入使用就可以,跟自带的模块调用方法无差,演示一个连接linux执行命令的模块

    复制代码
    import paramiko
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect("192.168.224.101", 22, "root", "   ")
    
    stdin, stdout, stderr = ssh.exec_command("df")
    print(stdout.read().decode("utf-8"))
    ssh.close()
    复制代码

    输出:

    复制代码
    文件系统               1K-块    已用     可用 已用% 挂载点
    /dev/mapper/cl-root 17811456 7775084 10036372   44% /
    devtmpfs              488272       0   488272    0% /dev
    tmpfs                 499300       0   499300    0% /dev/shm
    tmpfs                 499300   19344   479956    4% /run
    tmpfs                 499300       0   499300    0% /sys/fs/cgroup
    /dev/sda1            1038336  171112   867224   17% /boot
    tmpfs                  99864       0    99864    0% /run/user/0

     

    复制代码
    #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();
    
    执行命令 - 通过用户名和密码连接服务器
    复制代码
  • 相关阅读:
    python sendmail
    linux find命令
    10块钱去买酒,2块一瓶,2空瓶换一瓶,4盖换一瓶,问能喝到什么时候
    【转】通过经纬度坐标计算距离的方法(经纬度距离计算)
    Android应用开发相关下载资源(2015/3/20更新)
    使用Entity Framework访问MySQL数据库
    VS2013+EF6.1+Mysql配置心路历程
    SQL-LINQ-Lambda语法对照实例
    百度统计今晚更新了,统计的数据报表格式都大变样了,少不了我的功劳吧!跟类似yoyooho.com的小伙伴说再见啦
    跟踪那些像www.yoyooho.com非友链带来的百度统计数据解析【第三篇】
  • 原文地址:https://www.cnblogs.com/yihr/p/10818329.html
Copyright © 2020-2023  润新知