模块,用一堆代码实现了某个功能的代码集合。
类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。
如:os 是系统相关的模块;file是文件操作相关的模块
模块分为三种:
- 自定义模块
- 第三方模块
- 内置模块
1、自定义模块
情景一:
情景二:
情景三:
2、导入模块
Python之所以应用越来越广泛,在一定程度上也依赖于其为程序员提供了大量的模块以供使用,如果想要使用模块,则需要导入。导入模块有一下几种方法:
1 import module 2 from module.xx.xx import xx 3 from module.xx.xx import xx as rename 4 from module.xx.xx import *
导入模块其实就是告诉Python解释器去解释那个py文件
- 导入一个py文件,解释器解释该py文件
- 导入一个包,解释器解释该包下的 __init__.py 文件 【py2.7】
那么问题来了,导入模块时是根据那个路径作为基准来进行的呢?即:sys.path
1 import sys 2 print sys.path
执行结果:
['/Users/wupeiqi/PycharmProjects/calculator/p1/pp1', '/usr/local/lib/python2.7/site-packages/setuptools-15.2-py2.7.egg', '/usr/local/lib/python2.7/site-packages/distribute-0.6.28-py2.7.egg', '/usr/local/lib/python2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/xlutils-1.7.1-py2.7.egg', '/usr/local/lib/python2.7/site-packages/xlwt-1.0.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/xlrd-0.9.3-py2.7.egg', '/usr/local/lib/python2.7/site-packages/tornado-4.1-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/backports.ssl_match_hostname-3.4.0.2-py2.7.egg', '/usr/local/lib/python2.7/site-packages/certifi-2015.4.28-py2.7.egg', '/usr/local/lib/python2.7/site-packages/pyOpenSSL-0.15.1-py2.7.egg', '/usr/local/lib/python2.7/site-packages/six-1.9.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/cryptography-0.9.1-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/cffi-1.1.1-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/ipaddress-1.0.7-py2.7.egg', '/usr/local/lib/python2.7/site-packages/enum34-1.0.4-py2.7.egg', '/usr/local/lib/python2.7/site-packages/pyasn1-0.1.7-py2.7.egg', '/usr/local/lib/python2.7/site-packages/idna-2.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/pycparser-2.13-py2.7.egg', '/usr/local/lib/python2.7/site-packages/Django-1.7.8-py2.7.egg', '/usr/local/lib/python2.7/site-packages/paramiko-1.10.1-py2.7.egg', '/usr/local/lib/python2.7/site-packages/gevent-1.0.2-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/greenlet-0.4.7-py2.7-macosx-10.10-x86_64.egg', '/Users/wupeiqi/PycharmProjects/calculator', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/site-packages', '/Library/Python/2.7/site-packages']
如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径') 添加。
1 import sys 2 import os 3 project_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 4 sys.path.append(project_path)
总结:内置模块是Python自带的功能,在使用内置模块相应的功能时,需要【先导入】再【使用】
一、sys
用于提供对Python解释器相关的操作:
1 sys.argv 命令行参数List,第一个元素是程序本身路径 2 sys.exit(n) 退出程序,正常退出时exit(0) 3 sys.version 获取Python解释程序的版本信息 4 sys.maxint 最大的Int值 5 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 6 sys.platform 返回操作系统平台名称 7 sys.stdin 输入相关 8 sys.stdout 输出相关 9 sys.stderror 错误相关
1 import sys 2 import time 3 4 5 def view_bar(num, total): 6 rate = float(num) / float(total) 7 rate_num = int(rate * 100) 8 r = ' %d%%' % (rate_num, ) 9 sys.stdout.write(r) 10 sys.stdout.flush() 11 12 13 if __name__ == '__main__': 14 for i in range(0, 100): 15 time.sleep(0.1) 16 view_bar(i, 100) 17 18 进度百分比
sys模块示例1
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author: huzhihua 4 5 import sys 6 7 print(sys.path)
注意:
python2 执行上面代码会报错。(原因:不能和导入的库名相同)
python3 执行不会报错。
执行结果:
C:UsersAdministratorAppDataLocalProgramsPythonPython35-32python.exe D:/python/day2/sys.py ['D:\python\day2', 'D:\python', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\python35.zip', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\DLLs', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32', 'C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\lib\site-packages']
python标准库路径
C:UsersAdministratorAppDataLocalProgramsPythonPython35-32Lib
python第三方库路径
C:UsersAdministratorAppDataLocalProgramsPythonPython35-32Libsite-packages
sys模块示例2
说明:打印相对路径
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author: nulige 4 import sys 5 #print(sys.path) #打印环境变量 6 print(sys.argv)
执行结果:
1 ['D:/python/day2/sys.py']
说明:演示取出2
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author: nulige 4 5 import sys 6 #print(sys.path) #打印环境变量 7 print(sys.argv) 8 print(sys.argv[2])
二、os
用于提供系统级别的操作:
1 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 2 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd 3 os.curdir 返回当前目录: ('.') 4 os.pardir 获取当前目录的父目录字符串名:('..') 5 os.makedirs('dir1/dir2') 可生成多层递归目录 6 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 7 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname 8 os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname 9 os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 10 os.remove() 删除一个文件 11 os.rename("oldname","new") 重命名文件/目录 12 os.stat('path/filename') 获取文件/目录信息 13 os.sep 操作系统特定的路径分隔符,win下为"\",Linux下为"/" 14 os.linesep 当前平台使用的行终止符,win下为" ",Linux下为" " 15 os.pathsep 用于分割文件路径的字符串 16 os.name 字符串指示当前使用平台。win->'nt'; Linux->'posix' 17 os.system("bash command") 运行shell命令,直接显示 18 os.environ 获取系统环境变量 19 os.path.abspath(path) 返回path规范化的绝对路径 20 os.path.split(path) 将path分割成目录和文件名二元组返回 21 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 22 os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素 23 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False 24 os.path.isabs(path) 如果path是绝对路径,返回True 25 os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False 26 os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False 27 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 28 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 29 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
示例1
备注:os.mkdir("new_dir"),表示:创建一个目录
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author: nulige 4 5 import os 6 7 #cmd_res = os.system("dir") #执行命令,不保存结果 8 cmd_res = os.popen("dir").read() #保存在内存的一个地方,通过read方法读取出来 9 print("-->",cmd_res) 10 os.mkdir("new_dir")
执行结果:
1 --> Volume in drive D is SSD 2 Volume Serial Number is 687D-EF64 3 4 Directory of D:pythonday2 5 6 2016/11/02 18:58 <DIR> . 7 2016/11/02 18:58 <DIR> .. 8 2016/10/30 20:15 596 dictionary.py 9 2016/10/26 16:23 227 login.py 10 2016/10/26 18:31 829 names.py 11 2016/10/29 10:22 496 names08.py 12 2016/10/26 12:11 406 password.py 13 2016/10/30 15:44 1,457 shopping.py 14 2016/11/02 18:46 178 sys.py 15 2016/11/02 18:58 392 sys_mod.py 16 2016/10/29 10:50 152 test09.py 17 2016/10/26 14:08 <DIR> __pycache__ 18 9 File(s) 4,733 bytes 19 3 Dir(s) 764,362,289,152 bytes free
示例2
功能说明:判断输入用户名和密码是否正确
password.py
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author: nulige 4 #import getpass 5 6 _username = 'nulige' 7 _password = '123456' 8 username = input("username:") 9 #password = getpass.getpass("password:") 10 password = input("password:") 11 if _username == username and _password == password: 12 print("Welcome user {name} login...".format(name=username)) 13 else: 14 print("Invalid username or password!")
执行结果:
1 username:nulige 2 password:123456 3 Welcome user huzhihua login...
1 username:nulige 2 password:33333 3 Invalid username or password!
说明:介绍怎么调用模块
写一个名称为:login.py 的模块,然后用sys_mod.py去调用这个login.py的模块
login.py
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author: nulige 4 5 _username = 'nulige' 6 _password = '123456' 7 username = input("username:") 8 #password = getpass.getpass("password:") 9 password = input("password:") 10 if _username == username and _password == password: 11 print("Welcome user {name} login...".format(name=username)) 12 else: 13 print("Invalid username or password!")
sys_mod.py
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author: nulige 4 5 import login
执行结果:
输入错误的用户名和密码
1 username:nulige 2 password:333322 3 Invalid username or password!
输入正确的用户名和密码
1 username:nulige 2 password:123456 3 Welcome user nulige login...