• python模块详解


    目录

    一、模块详解

    1、模块

    1.基本概念

    2.作用

    3.模块文件

    4.搜索路径

    5.导入模块

    2、内置模块

    1. hashlib模块

    2.tarfile模块

    一、模块详解

    1、模块

    1.基本概念

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

    2.作用

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

    3.模块文件

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

    4.搜索路径

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

    5.导入模块

    ①. 查看模块的默认搜索路

    1. >>> import sys #导入模块sys
    2. >>> sys.path #path,查看python搜索模块时的默认查找路径
    3. ['', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.8/dist-packages']

    ②. 模块导入方法

            - 使用import导入模块

            - 可以在一行导入多个模块,但是可读性会下降

            - 可以只导入模块的某些属性

            - 导入模块时,可以为模块取别的名字

    1. >>> import time,os,sys #导入多个模块
    2. >>> from random import choice #导入random模块的choice属性
    3. >>> import pickle as p #为模块取别名

            - 当导入模块时,模块的顶层代码会被执行

            - 一个模块不管被导入(import)多少次,只会被加载(load)一次  

    1. root@kylin:~# cat >> foo.py << EOF #编写python文件
    2. > hi = 'hello world'
    3. > print(hi)
    4. > EOF
    5. root@kylin:~# python3
    6. Python 3.8.2 (default, May 10 2021, 05:51:26)
    7. [GCC 9.3.0] on linux
    8. Type "help", "copyright", "credits" or "license" for more information.
    9. >>> import foo #导入模块
    10. hello world #第一次导入执行print语句
    11. >>> import foo #再次导入不在执行
    12. >>>

    如果想让自己写的模块可以在任何位置被搜索到,可以将模块文件拷贝到sys.path中的'/usr/lib/python3.8/dist-packages/'路径下

    1. root@kylin:~# mkdir /tmp/mylibs #自定义目录,用于存放自己的模
    2. 块文件【目录可以随意指定】
    3. root@kylin:~# mv foo.py /tmp/mylibs/ #将foo.py文件移入到/tmp/mylibs中
    4. root@kylin:~# export PYTHONPATH=/tmp/mylibs #声明全局变量
    5. root@kylin:~# cd /home/ #切换到任意目录下
    6. root@kylin:/home# python3 #进入到python3解释器下
    7. Python 3.8.2 (default, May 10 2021, 05:51:26)
    8. [GCC 9.3.0] on linux
    9. Type "help", "copyright", "credits" or "license" for more information.
    10. >>> import foo #导入模块成功
    11. hello world
    12. #或者
    13. >>> import sys
    14. >>> sys.path.append("/root") #通过path增加路径

    2、内置模块

    1. hashlib模块

    ① hashlib用来替换MD5和sha模块,并使他们的API一直,专门提供hash算法

    ② 包括md5、sha1、sha224、sha256、sha384、sha512,使用简单、方便

    1. # 使用hashlib模块,计算bytes类型数据的md5值
    2. >>> import hashlib
    3. # 一次读取所有数据,计算出文件的md5值,适合于小文件数据
    4. >>> m = hashlib.md5(b'123456') #计算b'123456' 的md5值,返回一个对象
    5. >>> m.hexdigest() #以16进制的方式,显示m的md5值
    6. 'e10adc3949ba59abbe56e057f20f883e'
    7. # 每次读取少量数据,最后计算出文件的md5值,适合于大文件数据
    8. >>> m1 = hashlib.md5() #返回一个空数据的md5值
    9. >>> m1.update(b'12') #更新b'12'的md5值
    10. >>> m1.update(b'34')
    11. >>> m1.update(b'56')
    12. >>> m1.hexdigest() #以16进制的方式,显示m1的md5值,结果相同

    案例:编写用于计算文件 md5 值的脚本,文件名通过位置参数获得

    1. root@kylin:~# vim check_md5.py
    2. import sys #导入模块sys, 通过argv[1]获取位置参数
    3. import hashlib #计算文件的md5值
    4. def check_md5(fname): #使用def 定义函数check_md5(),计算文件的md5值
    5. m = hashlib.md5() #返回一个空数据的md5值
    6. with open(fname,mode='rb') as fobj:
    7. while 1:
    8. data = fobj.read(4096) #每次读取4096个字节【4k】
    9. if not data: #data为空时,退出while循环
    10. break
    11. m.update(data) #更新data的md5值
    12. return m.hexdigest()
    13. if __name__ == '__main__':
    14. print(check_md5(sys.argv[1]))
    15. root@kylin:~# python3 check_md5.py /etc/passwd
    16. bb7a961adc79be94591bfdd53afd2252

    2.tarfile模块

    ①. tarfile模块允许创建、访问tar文件

    ②. 同时支持gzip、bzip2格式

    1. >>> import tarfile #在local下, 导入模块tarfile【实现文件的打包和解压】
    2. >>> tar = tarfile.open('/tmp/demo.tar.gz','w:gz') ##以'w:gz'的格式,打开包文
    3. 件,文件不存在则会自动创建
    4. >>> tar.add('/etc/hosts') #向包文件中压缩文件/etc/hosts
    5. >>> tar.add('/etc/security') #向包文件中压缩目录/etc/security
    6. >>> tar.close() #关闭文件
    7. >>> tar = tarfile.open('/tmp/demo.tar.gz') #打开文件,文件已经存在,则不需要指定类型,
    8. python会自动选择
    9. >>> tar.extractall(path='/var/tmp') #解压到 /var/tmp目录下,不指定解压到当前目录
    10. >>> tar.close() #关闭文件
    11. root@kylin:~# ll /tmp/demo.tar.gz /var/tmp/etc/
    12. -rw-r--r-- 1 root root 8252 816 15:33 /tmp/demo.tar.gz
    13. /var/tmp/etc/:
    14. 总用量 16
    15. drwxr-xr-x 3 root root 4096 816 15:34 ./
    16. drwxrwxrwt 9 root root 4096 816 15:34 ../
    17. -rw-r--r-- 1 root root 221 718 10:45 hosts
    18. drwxr-xr-x 4 root root 4096 627 12:00 security/
  • 相关阅读:
    归并排序与计数排序
    在线配置生成动态排序柱状图工具上线
    德鲁伊数据库连接池的使用
    【初识LSTM——长短期记忆网络】生动介绍(图文版)
    redis集群-主从复制
    LeetCode --- 1920. Build Array from Permutation 解题报告
    基于机器视觉的移动消防机器人(四)--实验验证
    字节首席架构师整合面试痛点,成就399页Java框架核心宝典
    硬盘那些事(硬盘的分类)
    zookeeper面试整理
  • 原文地址:https://blog.csdn.net/qq_41619571/article/details/126358809