Python学习笔记13_模块
文章目录
- Python学习笔记13_模块
- 1、导入模块和的方法及使用
- 2、分层的文件系统中常用的包结构
- 3、OS 模块
- 4、sys 模块
- 5、math 模块
- 6、random 模块
- 7、datetime 模块
- 8、time 模块
- 9、zlib 模块
- 10、glob 模块
- 11、re 模块
- 12、互联网访问相关 模块
- 13、hashlib和hmac模块
- 14、使用pip命令管理第三方库
- 14.1、pip 命令使用
- 14.2、永久更改默认下载地址
- 15、自定义模块
- 16、python 包
- 16.1、包定义
- 16.2、导入包
- 模块通俗的讲就是一个符合命名规范的py文件, 一个模块通常包含多个函数/变量或函数和变量
1、导入模块和的方法及使用
1) import 模块名
复制代码
1
2
3
4import time # 使用 import 模块名 直接导入 time.time() # 模块名.函数名 使用模块里的函数 time.sleep(3) # 可以使用模块里所有的函数或变量
2)form 模块名 import 函数名/子包名
复制代码
1
2
3from random import randint # 使用 form 模块名 import 函数名/子包名 导入模块里一个函数或变量 randint(0,2) # 直接使用且只能使用这一个函数
3)form 模块名 import *
复制代码
1
2
3
4
5
6
7from math import * # 使用 form 模块名 import * 导入模块里所用函数和变量 # 可以直接使用模块里所有函数和变量 print(pi) abs(-4)
注:from math import * 实质是导入模块里__all__
列表包含的变量和函数,如果没有__all__
才会导入所有的变量和函数,但不能导入以一个下换线开始的变量和函数
4)import datetime as dt 导入一个模块,并起一个别名
复制代码
1
2
3import datetime as dt # 导入一个模块,并起一个别名 dt.MAXYEAR # 使用别名代替原模块名
5)from copy import deepcopy as dp 导入模块里一个函数或变量,并起一个别名
复制代码
1
2
3from copy import deepcopy as dp # 导入模块里一个函数或变量,并起一个别名 dp(['hello','good'[1,5,9],'yes'])
6)其他注意事项
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 也可以一次导入多个模块,多个模块之间用逗号隔开。 # 导入sys、os两个模块 import sys,os # 导入sys、os两个模块,并为sys指定别名s,为os指定别名o import sys as s,os as o # 导入sys模块的argv,winver成员 from sys import argv, winver # 导入sys模块的argv,winver成员,并为其指定别名v、wv from sys import argv as v, winver as wv
2、分层的文件系统中常用的包结构
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24sound/ 顶层包 __init__.py 初始化 sound 包 formats/ 文件格式转换子包 __init__.py wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py ... effects/ 声音效果子包 __init__.py echo.py surround.py reverse.py ... filters/ filters 子包 __init__.py equalizer.py vocoder.py karaoke.py ...
- 在导入一个包的时候,
Python
会根据sys.path
中的目录来寻找这个包中包含的子目录。 - 目录只有包含一个叫做
__init__.py
的文件才会被认作是一个包 - 如果包定义文件
__init__.py
存在一个叫做__all__
的列表变量,那么在使用from package import *
的时候就把这个列表中的所有名字作为包内容导入。 - 如果
__all__
真的没有定义,那么使用from sound.effects import *
这种语法的时候,就不会导入包sound.effects
里的任何子模块。他只是把包sound.effects
和它里面定义的所有内容导入进来(可能运行__init__.py
里定义的初始化代码) - 一般为了防止两个模块中有相同的名称的成员,不推荐使
from math import *
语法
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23from modname1 import * from modname2 import * from modname3 import * # 这样写代码的时候,代码中的变量会变得非常混乱。不仅仅是后面导入的同名函数会覆盖前面的问题,而且导致在写一个函数的时候不能确定它到底来自哪里,代码可读性会变得非常差。 # 建议尽量这样写 import modname1 import modname2 import modname3 modname1.def1() modname2.def1() modname3.def1() # 这样不仅不会找不见同名函数,也可以非常确切的看到这个函数来自哪里 # 如果库一层套一层,是这样的结构: import path1.path2.path3.modname1 # 可以用as关键字给它重命名,以便于缩短代码宽度,维持可读性 import path1.path2.path3.modname1 as pm
3、OS 模块
- os模块里提供的方法主要用来处理操作系统里的文件和文件夹
- OS 模块常用方法
复制代码
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111import os # 返回正在使用的平台。如果是windows则用‘nt’表示,对于linux/unix用户则用'posix'表示。 os.name # 返回当前python脚本工作的目录路径。 os.getcwd() # 返回一个当前工作目录的Unicode对象 os.getcwdb() # 获取当前目录的父目录,以字符串形式显示目录名。 os.pardir() # 获取环境配置 os.environ # 获取指定环境配置 os.environ.get('PATH') # 返回指定目录下的所有文件和目录名,括号里如果调用函数则不用双引号或单引号,如果是传入一个路径,则必须要用双引号或单引号将变量标识为一个整体,否则报错。括号内可以:1)调用函数 2)传入参数(即路径) os.listdir() # 重命名 os.rename(name,name1) # 删除一个文件,括号里必须是文件的指定路径 os.remove("文件路径") # 删除空文件夹 os.rmdir('文件夹路径') # 删除空文件夹 os.removedirs('文件夹路径') # 创建一个文件夹 os.mkdir() # 运行shell命令 os.system("shell命令") # 改变当前脚本的工作目录,相当于shell下的cd命令 os.chdir(path) # 返回上级目录 os.chdir('../') # 取代操作系统特定的路径分隔符,python是跨平台的,在windows上,文件的路径分隔符是''。为了让代码在不同的平台上上都能运行,使用os.sep会根据你所处的平台,自动采用相应的分隔符号。 os.sep() # 返回当前平台使用的行终止符,Linux使用'n', windows使用'rn', mac使用'r'. os.linesep() # 获取文件的属性信息。 os.path 模块 # 返回一个路径的目录名和文件名 os.path.split() # 检验给出的是否为文件 os.path.isfile() # 检验给出的是否为文件夹 os.path.isdir() # 检验给出的路径是否真实存在 os.path.exists() # 获得文件的绝对路径 os.path.abspath(name) # 规范path字符串形式 os.path.normpath(path) # 获取文件大小(字节); 在没写文件的路径的时候,默认的是当前的工作路径 os.path.getsize(name) # 分离文件名与扩展名 os.path.splitext() # 连接目录与文件名或目录 os.path.join(path,name) # 返回文件名,不包含拓展名 os.path.basename(path) # 返回文件路径 os.path.dirname(path) # 更改权限 os.chmod(path,flags) # 更改文件所有者 os.chown(path,uid,gid) # 改变当前进程的根目录 os.chroot(path) # 关闭文件描述符 fd os.close(fd) # 关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略 os.closerange(fd_low,fd_high) # 复制文件描述符 fd os.dup(fd) # 将一个文件描述符 fd 复制到另一个 fd2 os.dup2(fd,fd2) # 通过文件描述符改变当前工作目录 os.fchdir(fd) # 改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。 os.fchmod(fd,mod) # 修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。 os.fchown(fd,uid,gid) # 强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。 os.fdatafsync(fd) # 强制将文件描述符为fd的文件写入硬盘。 os.fsync(fd) # 打开一个文件,并且设置需要的打开选项,mode参数是可选的 os.fopen(file,flags[,mode]) # 创建一个管道. 返回一对文件描述符(r, w) 分别为读和写 os.pipe() # 从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。 os.read(fd,n) # 删除文件路径 os.unlink(path) # 写入字符串到文件描述符 fd中. 返回实际写入的字符串长度 os.write(fd,str)
4、sys 模块
- 提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数
复制代码
1
2
3
4
5
6
7
8
9
10import sys print(sys.path) # 返回一个列表,列出查找模块的所有路径 sys.argv # 传递给Python脚本的命令行参数列表 sys.exit() # 程序退出,和内置函数exit功能一样 sys.stdin # 接收用户输入 sys.stdout # 标准输出, 改变默认输出位置(如:输出到一个文件里) sys.stderr # 改变错误输出的默认位置
5、math 模块
- math模块为浮点运算提供了对底层C函数库的访问
复制代码
1
2
3
4
5
6
7>>> import math >>> math.cos(math.pi / 4) 0.70710678118654757 >>> math.log(1024, 2) 10.0
6、random 模块
- random提供了生成随机数的工具
复制代码
1
2
3
4
5
6
7
8
9
10
11
12>>> import random >>> random.choice(['apple', 'pear', 'banana']) 'apple' >>> random.sample(range(100), 10) # sampling without replacement [30, 83, 16, 4, 8, 81, 41, 50, 18, 33] >>> random.random() # random float 0.17970987693706186 >>> random.randrange(6) # random integer chosen from range(6) 4
7、datetime 模块
- datetime模块为日期和时间处理同时提供了处理的方法。还支持时区处理
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13>>> from datetime import date >>> now = date.today() >>> now datetime.date(2003, 12, 2) >>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.") '12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.' >>> birthday = date(1964, 7, 31) >>> age = now - birthday >>> age.days 14368
8、time 模块
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import time # 导入时间模块 start = time.time() # 获取当前时间戳 #时间戳就是格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起到现在的总秒数 time.sleep(3) # 延时3秒 time.localtime(start) # 格式化时间戳为本地时间, 返回一个时间元组 time.asctime(time.localtime(start)) #接受一个时间元组并返回一个可读的形式 time.ctime([secs]) # 需要一个时间戳,如果没有则返回计算机时间 time.gmtime() # 返回一个格林威治天文时间下的时间 end=time.time(); lenTime=end-start # 单位为秒
9、zlib 模块
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14>>> import zlib >>> s = b'witch which has which witches wrist watch' >>> len(s) 41 >>> t = zlib.compress(s) >>> len(t) 37 >>> zlib.decompress(t) b'witch which has which witches wrist watch' >>> zlib.crc32(s) 226805979
10、glob 模块
- glob模块提供了一个函数用于从目录通配符搜索中生成文件列表
复制代码
1
2
3
4>>> import glob >>> glob.glob('*.py') ['primes.py', 'random.py', 'quote.py']
11、re 模块
- re模块为高级字符串处理提供了正则表达式工具。对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案
复制代码
1
2
3
4
5
6>>> import re >>> re.findall(r'bf[a-z]*', 'which foot or hand fell fastest') ['foot', 'fell', 'fastest'] >>> re.sub(r'(b[a-z]+) 1', r'1', 'cat in the the hat') 'cat in the hat'
- 如果只需要简单的功能,应该首先考虑字符串方法,因为它们非常简单,易于阅读和调试
复制代码
1
2
3>>> 'tea for too'.replace('too', 'two') 'tea for two'
12、互联网访问相关 模块
- 有几个模块用于访问互联网以及处理网络通信协议。其中最简单的两个是用于处理从 urls 接收的数据的 urllib.request 以及用于发送电子邮件的 smtplib
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18>>> from urllib.request import urlopen >>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'): ... line = line.decode('utf-8') # Decoding the binary data to text. ... if 'EST' in line or 'EDT' in line: # look for Eastern Time ... print(line) <BR>Nov. 25, 09:43:32 PM EST >>> import smtplib >>> server = smtplib.SMTP('localhost') >>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org', ... """To: jcaesar@example.org ... From: soothsayer@example.org ... ... Beware the Ides of March. ... """) >>> server.quit()
13、hashlib和hmac模块
- 这两个模块都是用来加密的,加密方式: 单向加密(只有加密过程,不能解密,如md5/sha))、对称加密、非对称加密
- hashlib模块主要有md5和sha两种加密算法
复制代码
1
2
3
4
5
6
7import hashlib # 需要将加密的内容转化为二进制 x=hashlib.md5() # 生成一个md5对象 x.update('123'.encode('utf8')) print(x.hexdigest())
复制代码
1
2
3
4
5
6
7
8
9
10
11# hmac模块也是一种单向的加密算法,并且它是基于各种哈希算法/散列算法, # 只是它可以在运算的过程中,使用一种密钥来增强安全性,hmac模块实现了HAMC算法, # 提供了相应的函数和方法,且与hashlib提供的api基本一致. import hmac h = hmac.new(bytes('secret_key','utf8'),bytes('ssssddddddd','utf8'),hashlib.sha1) #第一个参数是密钥key,第二个参数是待加密的字符串,第三个参数是hash函数 # Python3 key和带加密字符串需转换为bytes类型,且需要utf8编码 result = h.hexdigest() print(result)
14、使用pip命令管理第三方库
14.1、pip 命令使用
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# 下载安装第三方库 pip install <库名> # 卸载第三方库 pip uninstall <库名> # 列出当前环境安装了哪些模块和版本号 pip list # 列出当前环境安装了哪些模块和版本号 pip freeze # 重定向,即将安装的库及对应的版本号放到 requirements.txt文件里 pip freeze > requirements.txt # 读取并安装文件里的库 pip -r install requirements.txt # 临时从指定网站下载 pip install <库名> -i <网址>
14.2、永久更改默认下载地址
- 在用户目录下创建一个pip文件夹,然后再在文件夹里创建一个pip.ini文件并输入以下内容
复制代码
1
2
3
4
5[global] index-url=https://mirrors.aliyun.com/pypi/simple [install] trusted-host=mirrors.aliyun.com
15、自定义模块
- 模块是符合命名规范的py文件, 所以创建一个py文件就可以创建自定义模块
复制代码
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__all__ = ['m', 'date'] '''from <模块名> import * 语法只能调用__all__列表包含的变量和函数, 如果没有__all__才会导入所有的变量和函数,但不能导入以一个下换线开始的变量和函数''' m = 'hello' a = 1000 def date(): print('我是模块里的name') # 约定俗成: 以一个下划线开始的变量和函数只在本模块内部使用,不建议外部调用,如果强行调用可能会崩 _x = 'world' # 使用 from <> impport * 语法无法调用以一个下划线开始的变量和函数,通过不将 _x放入 __all__来保证使用 import * 不会导入 _x def _qute(): print('我是_qute函数') def division(a,b): return a/b # __name__当直接运行py文件时,值是__main__ # 如果这个py文件作为模块导入时,值是文件名 if __name__=='__main__': # 使用次语句可以检测模块里的函数,而在调用时不执行以下内容 print('模块里的name是:',__name__) # 模块里的name是: __main__ print('测试一下 division 函数,结果是:',division(4,2)) # 在最后使用del函数删除变量和函数,即使外部强行调用也会崩,没有删除的可以调用 # 约定俗成:只删除以一个下划线开始的变量和函数 del (_x)
16、python 包
16.1、包定义
- 为了组织好模块,会将多个模块封装为包
- Python 处理包也是相当方便的。简单来说,包就是文件夹,但该文件夹下必须存在
__init__.py
文件。 - 常见的包结构:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24sound/ 顶层包 __init__.py 初始化 sound 包 formats/ 文件格式转换子包 __init__.py wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py ... effects/ 声音效果子包 __init__.py echo.py surround.py reverse.py ... filters/ filters 子包 __init__.py equalizer.py vocoder.py karaoke.py ...
- 最简单的情况下,只需要一个空的
__init__.py
文件即可。当然它也可以执行包的初始化代码,或者定义__all__
变量
16.2、导入包
- 包的导入仍使用 import 、 from … import 语句,使用 “圆点模块名” 的结构化模块命名空间
最后
以上就是开心玉米最近收集整理的关于Python学习笔记13_模块的全部内容,更多相关Python学习笔记13_模块内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复