Python学习笔记13_模块

Python学习笔记13_模块

  • 模块通俗的讲就是一个符合命名规范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使用'\r\n', 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('[email protected]', '[email protected]',
... """To: [email protected]
... From: [email protected]
...
... Beware the Ides of March.
... """)
>>> server.quit()

13、hashlib和hmac模块

  • 这两个模块都是用来加密的,加密方式: 单向加密(只有加密过程,不能解密,如md5/sha))、对称加密、非对称加密
  • hashlib模块主要有md5sha两种加密算法
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 语句,使用 “圆点模块名” 的结构化模块命名空间

猜你喜欢

转载自blog.csdn.net/qq_38342510/article/details/124908053
今日推荐