os
模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用os
模块,一方面可以方便地与操作系统进行交互,另一方面页可以极大增强代码的可移植性
需要注意的是:导入 os
模块时还要小心一点,千万不要为了图调用省事儿而将os
模块解包导入,即不要使用:
from os import *
来导入os
模块;否则 os.open()
将会覆盖内置函数 open()
,从而造成预料之外的错误。
os模块
- os.name
指明了当前 Python 运行所在的环境。目前有效名称为以下三个:posix
,nt
,java
。
其中:
posix 是 Portable Operating System Interface of UNIX(可移植操作系统接口)的缩写。Linux 和 Mac OS 均会返回该值;
nt 全称应为 “Microsoft Windows NT”,大体可以等同于 Windows 操作系统,因此 Windows 环境下会返回该值;
java 则是 Java 虚拟机环境下的返回值。
-
os.environ
返回环境相关的信息,主要是各类环境变量。
-
os.walk()
这个函数需要传入一个路径作为 top
参数,函数的作用是在以 top
为根节点的目录树中游走,对树中的每个目录生成一个由 (dirpath, dirnames, filenames)
三项组成的三元组。
其中:
dirpath 是一个指示这个目录路径的字符串
dirnames 是一个 dirpath 下子目录名(除去 “.” 和 “..” )组成的 列表
filenames 则是由 dirpath 下所有非目录的文件名组成的列表。
要注意的是,这些名称并不包含所在路径本身,要获取 dirpath 下某个文件或路径从 top 目录开始的完整路径,需要使用 os.path.join(dirpath, name) 。
该函数返回值为一个迭代器,需要使用循环获取每一项内容
-
os.listdir()
列出(当前)目录下的全部路径(及文件)。该函数存在一个参数,用以指定要列出子目录的路径,默认为 .
,即“当前路径”。返回值为一个列表
-
os.mkdir()
用处是新建一个路径。需要传入一个类路径参数用以指定新建路径的位置和名称,如果指定路径已存在,则会抛出 FileExistsError
异常。该函数只能在已有的路径下新建一级路径,否则(即新建多级路径)会抛出 FileNotFoundError
异常。
- os.makedirs()
与os.mkdir()功能相同,唯一的区别是该函数执行的是递归创建,若有必要,会分别新建指定路径经过的中间路径,直到最后创建出末端的 “叶子路径”。
-
os.remove()
用于删除文件,如果指定路径是目录而非文件的话,就会抛出 IsADirectoryError
异常
- os.removedirs()
递归删除文件,该函数会尝试从最下级目录开始,逐级删除指定的路径,几乎就是一个 os.makedirs()
的逆过程;一旦遇到非空目录即停止。
- os.rmdir()
用于删除目录
- os.rename()
该函数的作用是将文件或路径重命名,一般调用格式为 os.rename(src, dst)
,即将 src
指向的文件或路径重命名为 dst
指定的名称。注意, 如果指定的目标路径在其他目录下,该函数还可实现文件或路径的 “剪切并粘贴” 功能。
- os.renames()
与os.rename()类似,不过该函数能够创建缺失的中间路径
-
os.getcwd()
获取当前工作路径
- os.chdir()
切换当前工作路径为指定路径。其中“指定路径”需要作为参数传入函数os.chdir()
,该参数既可以是文本或字节型字符串,也可以是一个文件描述符,还可以是一个广义的类路径(path-like)对象。若指定路径不存在,则会抛出 FileNotFoundError
异常。
- os.system()
运行shell命令,其中需要运行的命令需要作为参数传入,并运行结果会直接显示,需要注意的是,该函数是有返回值的,如果返回值为0,则表示运行成功,否则返回为1
os.path 模块
其实这个模块是 os
模块根据系统类型从另一个模块导入的,并非直接由 os
模块实现.使用该模块要注意一个很重要的特性:os.path
中的函数基本上是纯粹的字符串操作。换句话说,传入该模块函数的参数甚至不需要是一个有效路径,该模块也不会试图访问这个路径,而仅仅是按照“路径”的通用格式对字符串进行处理。
- os.path.join()
可以将多个传入路径组合为一个路径。
- os.path.abspath()
将传入路径规范化,返回一个相应的绝对路径格式的字符串。当传入路径符合“绝对路径”的格式时,该函数仅仅将路径分隔符替换为适应当前系统的字符,不做其他任何操作,并将结果返回。当指定的路径不符合上述格式时,该函数会自动获取当前工作路径,并使用os.path.join()
函数将其与传入的参数组合成为一个新的路径字符串。
- os.path.basename()
该函数返回传入路径的 “基名”,即传入路径的最下级目录。需要注意的是,如果最下级目录之后还有一个分隔符,得到的就会是一个空字符串
- os.path.dirname()
与os.path.basename()相反,返回的是最后一个分隔符前的整个字符串
-
os.path.split()
将传入路径以最后一个分隔符为界,分成两个字符串,并打包成元组的形式返回;
前两个函数 os.path.dirname()
和 os.path.basename()
的返回值分别是函数 os.path.split()
返回值的第一个、第二个元素。
- os.path.exists()
用于判断传入的参数所指向的位置是否存在。若存在则返回 True
,不存在则返回 False
- os.path.isabs()
判断传入路径是否是绝对路径,若是则返回 True
,否则返回 False
- os.path.isfile()
判断传入路径是否是文件,若是则返回 True
,否则返回 False
- os.path.isdir()
判断传入路径是否是目录,若是则返回 True
,否则返回 False
-
os.path.relpath
以绝对路径生成相对路径。