Python基础-模块

模块,用一堆代码实现了某个功能的代码集合。 

类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.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...
原文地址:https://www.cnblogs.com/nulige/p/6023985.html