概述
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 模块名
import time # 使用 import 模块名 直接导入
time.time() # 模块名.函数名 使用模块里的函数
time.sleep(3) # 可以使用模块里所有的函数或变量
2)form 模块名 import 函数名/子包名
from random import randint # 使用 form 模块名 import 函数名/子包名 导入模块里一个函数或变量
randint(0,2) # 直接使用且只能使用这一个函数
3)form 模块名 import *
from math import * # 使用 form 模块名 import * 导入模块里所用函数和变量
# 可以直接使用模块里所有函数和变量
print(pi)
abs(-4)
注:from math import * 实质是导入模块里__all__
列表包含的变量和函数,如果没有__all__
才会导入所有的变量和函数,但不能导入以一个下换线开始的变量和函数
4)import datetime as dt 导入一个模块,并起一个别名
import datetime as dt # 导入一个模块,并起一个别名
dt.MAXYEAR # 使用别名代替原模块名
5)from copy import deepcopy as dp 导入模块里一个函数或变量,并起一个别名
from copy import deepcopy as dp # 导入模块里一个函数或变量,并起一个别名
dp(['hello','good'[1,5,9],'yes'])
6)其他注意事项
# 也可以一次导入多个模块,多个模块之间用逗号隔开。
# 导入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、分层的文件系统中常用的包结构
sound/ 顶层包
__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 *
语法
from 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 模块常用方法
import 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 模块
- 提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数
import sys
print(sys.path) # 返回一个列表,列出查找模块的所有路径
sys.argv # 传递给Python脚本的命令行参数列表
sys.exit() # 程序退出,和内置函数exit功能一样
sys.stdin # 接收用户输入
sys.stdout # 标准输出, 改变默认输出位置(如:输出到一个文件里)
sys.stderr # 改变错误输出的默认位置
5、math 模块
- math模块为浮点运算提供了对底层C函数库的访问
>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0
6、random 模块
- random提供了生成随机数的工具
>>> 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模块为日期和时间处理同时提供了处理的方法。还支持时区处理
>>> 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 模块
import 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 模块
>>> 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模块提供了一个函数用于从目录通配符搜索中生成文件列表
>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']
11、re 模块
- re模块为高级字符串处理提供了正则表达式工具。对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案
>>> 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'
- 如果只需要简单的功能,应该首先考虑字符串方法,因为它们非常简单,易于阅读和调试
>>> 'tea for too'.replace('too', 'two')
'tea for two'
12、互联网访问相关 模块
- 有几个模块用于访问互联网以及处理网络通信协议。其中最简单的两个是用于处理从 urls 接收的数据的 urllib.request 以及用于发送电子邮件的 smtplib
>>> 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两种加密算法
import hashlib
# 需要将加密的内容转化为二进制
x=hashlib.md5() # 生成一个md5对象
x.update('123'.encode('utf8'))
print(x.hexdigest())
# 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 命令使用
# 下载安装第三方库
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文件并输入以下内容
[global]
index-url=https://mirrors.aliyun.com/pypi/simple
[install]
trusted-host=mirrors.aliyun.com
15、自定义模块
- 模块是符合命名规范的py文件, 所以创建一个py文件就可以创建自定义模块
__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
文件。 - 常见的包结构:
sound/ 顶层包
__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_模块所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复