python自动化运维学习第十一天--模块的使用

模块

模块是python组织代码的基本方式。
一个python脚本可以单独运行,也可以导入到另一个脚本中运行,当脚本被导入运行时,称其为模块(module)。
所有的.py文件都可以作为一个模块导入。
模块名与脚本的文件名相同。
例如编写一个名为hello.py的脚本,可以在另一个脚本中用import hello语句导入这个脚本。

python的模块可以按照目录组织为包。
创建一个包的步骤:

  • 创建一个目录,目录名即为包名
  • 在该目录下创建一个__init__.py文件
  • 根据需要,在该目录下存放脚本文件或已编译的扩展及子包
  • 使用时,import pack.m1,pack.m2,pack.m3

模块的存放位置可以通过sys.path查看

import sys
print sys.path   #会返回一个列表,存放包的路径,每个路径都是目录

当导入包时,程序会依次从sys.path返回列表的目录中查找,当该包不在目录中时会报错。
Linux中大部分包是安装在/usr/lib64/python2.6(不同python版本会不同)目录下
添加自定义python包路径

  1. 通过sys.path.append(path),把path添加到python的包路径中,只能临时生效,退出后失效
  2. 通过编辑用户家目录下的.bashrc文件,具体操作如下:
vim /root/.bashrc    #以root用户为例
export PYTHONPATH = /tmp/path   #添加这一行
##保存退出
#执行
. .bashrc

这样就可以把/tmp/path添加到python的包路径中

例子:

编写一个统计文件行数、单词数和字符数的脚本,并用另一个脚本导入该脚本。

  1. 首先编写一个名字为wc.py的文件
#!/usr/bin/python
# -*- coding: utf-8 -*-
def wordCount(s):
    chars = len(s)
    words = len(s.split())
    lines = s.count('\n')    #统计\n的个数,即行数
    print "lines:%s   words:%s   chars:%s" % (lines, words, chars)
if __name__ == '__main__':    #添加了该行代码后,本脚本执行下面代码,其他脚本调用该脚本不执行下面代码
    f = open('/etc/passwd').read()
    wordCount(f)

说明:本脚本的__name__返回的是__main__这个值,其他脚本调用该脚本的__name__时返回的是该脚本的名字wc,所以本脚本会执行if下的代码,而其他脚本调用该脚本时不执行if下的代码。这是为了在不改变本脚本执行结果的情况下,其他脚本可以使用该脚本的函数,避免代码重写,提高代码复用率。

  1. 编写另一个脚本,名字为import_wc.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
import wc    #直接写脚本名字,不用加.py
s = '''hello world!
this is python!
'''
wc.wordCount(s)     #调用wc脚本的wordCount函数,不能直接使用函数名调用,函数名前还要添加模块名

注意:两个脚本要放在同一个目录下,或者wc.py脚本要在sys.path列表的目录下。
使用包的例子
首先在创建一个目录,比如我们创建一个ex_pack目录,在该目录下创建一个__init__.py的空文件,把上边的两个脚本移动到ex_pack目录下。

from ex_pack import wc                #加载ex_pack包下的wc模块
wc.wordCount('hello world!\n')        #调用wordCount函数
import ex_pack.wc                     #导入ex_pack下的wc模块
ex_pack.wc.wordCount('hello world!\n')   #调用wordCount函数时需要加包名和模块名
from ex_pack.wc import wordCount      #把ex_pack包中wc模块下的wordCount函数直接导入
wordCount('hello world!\n')           #可以直接使用该函数
from ex_pack.wc import wordCount as wdct    #使用as来定义一个别名,方便调用时使用
wdct('hello world!\n')                #使用别名

猜你喜欢

转载自blog.csdn.net/wang035759984/article/details/84713634