python专区--模块详解

模块详解

模块

基本概念

  • 模块支持从逻辑上组织 python 代码
  • 当代码量变得非常大的时候,最好把代码分成一些有组织的代码段
  • 代码片段相互间有一定的联系,可能是一个包含数据成员和方法的类,也可能是一组相关但彼此独立的操作函数
  • 这些代码段是共享的,所有 python 允许 “调入” 一个模块,允许使用其他模块的属性来利用之前的工作成果,实现代码重用

作用

  • 模块可以实现代码的重用,导入模块,就可以使用模块中已经定义好的类,函数和变量,减少代码的冗余性

模块文件

  • 模块是从逻辑来组织 python 代码的方法,文件是物理层上组织模块的方法
  • 一个文件被看作是一个独立模块,一个模块也可以被看作是一个文件
  • 模块的文件名就是模块的名字加上扩展名 .py

搜索路径

  • 模块的导入需要一个叫做 “路径搜索” 的过程
  • python 在文件系统 “预定义区域” 中查找要调用的模块
  • 搜索路径在 sys.path 中定义
  • 也可以通过 PYTHONPATH 环境变量引入自定义目录

导入模块

查看模块的默认搜索路径

>>> import sys		#导入模块sys
>>> sys.path		#path, 查看python搜索模块时的默认查找路径

模块导入方法

  • 使用import导入模块
  • 可以在一行导入多个模块,但是可读性会下降
  • 可以只导入模块的某些属性
  • 导入模块时,可以为模块取别名
>>> import time, os, sys
>>> from random import choice
>>> import pickle as p
  • 当导入模块时,模块的顶层代码会被执行
  • 一个模块不管被导入(import)多少次,只会被加载(load)一次
[root@localhost day07]# mkdir /tmp/mylibs  #自定义目录,用于存放自己的模块文件【目录可以随意指定】
[root@localhost day07]# cp 自定义模块.py /tmp/mylibs/  #拷贝自定义模块.py 文件到/tmp/mylibs中,作为一个模块文件

[root@localhost day07]# export PYTHONPATH=/tmp/mylibs		#声明全局变量
[root@localhost day07]# cd /home/		#切换到任意目录下
[root@localhost day07]# python3 		#进入到python的交互式解释器下
>>> import 自定义模块		#导入模块自定义模块成功

内置模块

hashlib 模块

  • hashlib 用来替换 MD5 和 sha 模块,并使他们的API一致,专门提供hash算法
  • 包括md5、sha1、sha224、sha256、sha384、sha512,使用非常简单、方便
# 使用hashlib模块,计算bytes类型数据的md5值
>>> import hashlib
# 一次读取所有数据,计算出文件的md5值,适合于小文件数据
>>> m = hashlib.md5(b'123456')			#计算b'123456' 的md5值,返回一个对象
>>> m.hexdigest()						#以16进制的方式,显示m的md5值

# 每次读取少量数据,最后计算出文件的md5值,适合于大文件数据
>>> m1 = hashlib.md5()		#返回一个空数据的md5值
>>> m1.update(b'12')		#更新b'12'的md5值
>>> m1.update(b'34')
>>> m1.update(b'56')
>>> m1.hexdigest()			#以16进制的方式,显示m1的md5值,结果相同

练习 5:计算文件 md5 值

需求

  • 编写用于计算文件 md5 值的脚本
  • 文件名通过位置参数获得
  • 打印出文件 md5 值
# 创建新的python文件check_md5.py,计算文件的md5值
import hashlib       	#计算文件的md5值

def check_md5(fname):    		#使用def 定义函数check_md5(),计算文件的md5值
    m = hashlib.md5()         #返回一个空数据的md5值
    with open(fname, mode='rb') as fobj:
        while 1:
            data = fobj.read(4096)     		#每次读取4096个字节【4k】
            if len(data) == 0:               		#data为空时,退出while循环
                break
            m.update(data)             	#更新data的md5值
    return  m.hexdigest()              	#返回给函数16进制的mdf值
  
if __name__ == '__main__':
    print(check_md5("/etc/hosts"))   

[root@localhost xxx]# python3 check_md5.py
54fb6627dbaa37721048e4549db3224d

tarfile 模块

  • tarfile模块允许创建、访问 tar 文件
  • 同时支持 gzip、bzip2 格式
>>> import tarfile		#在local下, 导入模块tarfile【实现文件的打包和解压】
>>> tar = tarfile.open('/tmp/demo.tar.gz', 'w:gz')		#以'w:gz'的格式,打开包文件,文件不存在则会自动创建
>>> tar.add('/etc/hosts')			#向包文件中压缩文件/etc/hosts
>>> tar.add('/etc/security')		#向包文件中压缩目录/etc/security
>>> tar.close()					#关闭文件
[root@localhost day02]# ls -l /tmp/demo.tar.gz 

>>> tar = tarfile.open('/tmp/demo.tar.gz')	#打开文件,文件已经存在,则不需要指定类型,python会自动选择
>>> tar.extractall(path='/var/tmp')		#解压到 /var/tmp目录下,不指定解压到当前目录
>>> tar.close()						#关闭文件
[root@localhost day07]# ls /var/tmp/etc/		#查看软件包demo.tar.gz是否解压成功

猜你喜欢

转载自blog.csdn.net/m0_52508197/article/details/127224474