第30讲:文件系统——介绍一个高大上的东西

一 模块的基本概念

1 定义:Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。

2 功能:

  • 模块让你能够有逻辑地组织你的 Python 代码段。
  • 把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
  • 模块能定义函数,类和变量,模块里也能包含可执行的代码。

3 创建:将所需代码保存在文件扩展名为 .py 的文件中的过程即为创建模块的过程

4 导入:我们可以通过 import 语句来导入我们创建的模块

  • import 模块名1 [as 别名1], 模块名2 [as 别名2],…
  • 特点:
    • 使用这种语法格式的 import 语句,会导入指定模块中的所有成员(包括变量、函数、类等)
    • 当需要使用模块中的成员时,需用该模块名(或别名)作为前缀,否则 Python 解释器会报错。
  • 常见格式:
    • import 模块名:最简单的语法,导入整个模块
    • import 模块名 as 别名:导入整个模块时,也可以为模块指定别名。
    • import 模块名1,模块名2:一次导入多个模块,多个模块之间用逗号隔开。
    • import 模块名1 as 别名1,模块名2 as 别名2:在导入多个模块的同时,也可以为模块指定别名
  • from import 语句:from 模块名 import 成员名1 [as 别名1],成员名2 [as 别名2],…
  • 特点:
    •  使用这种语法格式的 import 语句,只会导入模块中指定的成员,而不是全部成员。
    • 当程序中使用该成员时,无需附加任何前缀,直接使用成员名(或别名)即可。
  • 常见格式:
    • from 模块名 import 成员名:最简单的语法,导入指定成员
    • from 模块名 import 成员名  as 别名:导入模块成员时,也可以为成员指定别名
    • from 模块名 import 成员名1,成员名2:from...import 导入模块成员时,支持一次导入多个成员
    • from 模块名 import 成员名1 as 别名1,成员名2 as 别名2:一次导入多个模块成员时,也可指定别名,同样使用 as 关键字为成员指定别名
    • from 模块名 import *:一般不推荐使用“from 模块 import *”这种语法导入指定模块内的所有成员,因为它存在潜在的风险。当两个不同模块中出现同名函数时,调用该函数会出现问题

5 reload()函数:

  • 功能:该函数会重新导入之前导入过的模块
  • 语法:reload(module_name)
  • 应用场景:当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。如果想重新执行模块里顶层部分的代码,可以用 reload() 函数
  • 环境变量PYTHONPATH的相关内容:

6 PYTHONPATH变量:环境变量PYTHONPATH 由装在一个列表里的许多目录组成。

7 模块搜索路径:当你导入一个模块,Python 解析器对模块位置的搜索顺序是:

  • 1、当前目录
  • 2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
  • 3、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。

模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

8 解决“Python找不到指定模块”的方法有 3 种:

  • 1 向 sys.path 中临时添加模块文件存储位置的完整路径;
  • 2 将模块放在 sys.path 变量中已包含的模块加载路径中;
  • 3 设置 path 系统环境变量。

9 查看成员:

  • dir()函数:
    • 功能:查看某指定模块包含的全部成员(包括变量、函数和类),语法:dir(模块名)
    • dir() 函数一个排好序的字符串列表,内容是一个模块里定义过的名字。
    •  返回的列表容纳了在一个模块里定义的所有模块,变量和函数
    • 这里所指的全部成员,不仅包含可供我们调用的模块成员,还包含所有名称以双下划线“__”开头和结尾的成员,而这些“特殊”命名的成员,是为了在本模块中使用的,并不希望被其它文件调用。
  • _all_变量:
    • 借助该变量也可以查看模块(包)内包含的所有成员。模块名.__all__
    • __all__ 变量在查看指定模块成员时,它不会显示模块中的特殊成员,同时还会根据成员的名称进行排序显示。
    • 并非所有的模块都支持使用 __all__ 变量,因此对于获取有些模块的成员,就只能使用 dir() 函数。

10 命名空间和作用域:

  • 变量:指的是拥有匹配对象的名字(标识符)
  • 命名空间:是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典。
  • 局部命名空间:局部变量的作用域
  • 全局命名空间:全局变量的作用域
  • 特点:
    • 一个 Python 表达式可以访问局部命名空间和全局命名空间里的变量。
    • 如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。
    • Python 会智能地猜测一个变量是局部的还是全局的,它假设任何在函数内赋值的变量都是局部的。因此,如果要给函数内的全局变量赋值,必须使用 global 语句。

11 globals()函数和locals()函数

  • 根据调用地方的不同,globals() 和 locals() 函数可被用来返回全局和局部命名空间里的名字。
  • 如果在函数内部调用 locals(),返回的是所有能在该函数里访问的命名。
  • 如果在函数内部调用 globals(),返回的是所有在该函数里能访问的全局名字。
  • 两个函数的返回类型都是字典。所以名字们能用 keys() 函数摘取。

二 一些常见模块

1 os模块

  • 1) 查询/改变目录
    • os.getcwd():查看当前所在路径,即返回当前工作目录
    • os.listdir(path):列举目录下的所有文件。返回的是列表类型。
    • os.chdir(path):改变工作目录
  • 2)创建目录
    • os.mkdir(path):创建单层目录,如果目录已经存在,抛出异常
    • os.makedirs(path):递归创建多层目录,如该目录已存在抛出异常
  • 3)删除文件/目录
    • os.remove(path):删除文件
    • os.rmdir(path):删除单层目录,如目录非空则抛出异常
    • os.removedirs(path):递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常
  • 4)文件相关
    • os.mknod("textt.txt"):创建空文件
    • os.stat(file):获取文件属性
    • os.chmod(file):修改文件权限/时间戳
    • os.rename(old, new):将文件old重命名为new
  • 5)遍历目录
    • 遍历top路径以下所有的子目录,返回一个三元组:(路径, [包含目录], [包含文件])
  • 6)系统相关
    • os.exit():终止当前进程
    • os.system(command):运行系统的shell命令
  • 7)支持所有平台的一些路径操作
    • os.curdir:指代当前目录('.')
    • os.pardir:指代上一级目录('..')
    • os.environ:获取系统环境变量
    • os.sep:输出操作系统特定的路径分隔符(Win下为'\\',Linux下为'/')
    • os.linesep:当前平台使用的行终止符(Win下为'\r\n',Linux下为'\n')
    • os.pathsep:输出用于分割文件路径的字符串 (win下为;,Linux下为:)
    • os.name:指代当前使用的操作系统(包括:'posix'——linux/Unix用户,  'nt'——windows, 'mac', 'os2', 'ce', 'java')

2 os.path模块

  • 1)查看绝对路径
    • os.path.abspath(path):返回path的绝对路径。
  • 2)查看路径的文件夹部分和文件名部分
    • os.path.split(path):将路径分解为(文件夹,文件名),返回的是元组类型。
      • 可以看出,若路径字符串最后一个字符是\,则只有文件夹部分有值;
      • 若路径字符串中均无\,则只有文件名部分有值;
      • 若路径字符串有\,且不在最后,则文件夹和文件名均有值。且返回的文件夹的结果不包含\.
    • os.path.splitext(path):分离文件名与扩展名,返回(f_name, f_extension)元组
    • os.path.join(path1,path2,...):将path进行组合,若其中有绝对路径,则之前的path将被删除。
    • os.path.dirname(path):返回path中的文件夹部分,结果不包含'\'
    • os.path.basename(path):返回path中的文件名。
  • 3)查看文件时间
    • os.path.getmtime(path):文件或文件夹的最后修改时间,从新纪元到访问时的秒数。(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
    • os.path.getatime(path):文件或文件夹的最后访问时间,从新纪元到访问时的秒数。(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
    • os.path.getctime(path):文件或文件夹的创建时间,从新纪元到访问时的秒数。(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
  • 4)查看文件大小
    • os.path.getsize(path):文件或文件夹的大小,单位是字节,若是文件夹返回0。
  • 5)规范path格式
    • os.path.normpath(path):规范path字符串形式
  • 6)判断内容,返回True或False
    • os.path.exists(path):判断文件或文件夹是否存在
    • os.path.isabs(path):判断指定路径是否为绝对路径
    • os.path.isdir(path):判断指定路径是否存在且是一个目录
    • os.path.isfile(path):判断指定路径是否存在且是一个文件
    • os.path.islink(path):判断指定路径是否存在且是一个符号链接
    • os.path.ismount(path):判断指定路径是否存在且是一个挂载点
    • os.path.samefile(path1, paht2):判断path1和path2两个路径是否指向同一个文件

 

posted @ 2020-07-28 22:23  洛兰123  阅读(15)  评论(0编辑  收藏