os 包的可移植性很强, 在不同操作系统下写的 os 代码几乎可以不加修改的在其他操作系统上运行. os 包提供了常用的 Python 和操作系统交互的函数.
Tasks | Tools |
---|---|
Shell variables | os.environ |
Running programs | os.system |
os.popen | |
os.execv | |
os.spawnv | |
Spawning processes | os.fork |
os.pipe | |
os.waitpid | |
os.kill | |
Descriptor files | os.open |
os.read | |
os.write | |
File processing | os.remove |
os.rename | |
os.mkfifo | |
os.mkdir | |
os.rmdir | |
Administrative tools | os.getcwd |
os.chdir | |
os.chmod | |
os.getpid | |
os.listdir | |
os.access |
操作文件和文件夹
os 包中有 linux 下常用的对文件操作的函数.
os.getcwd()
: 获取当前的工作目录, 相当于 linux 下pwd
.os.chdir(path)
: 改变当前工作目录, 相当于 linux 下cd
.os.listdir(path)
: 列出当前路径下的文件, 相当于 linux 下ls
.os.mkdir(dir)
: 建立新目录, 相当于 linux 下mkdir
.os.mkdirs(dir)
: 第归建立目录, 相当于 linux 下mkdir -p
.os.rmdir(dir)
: 删除空目录, 相当于 linux 下rmdir
.os.removedirs(dir)
: 第归删除目录, 相当于 linux 下rmdir -p
.-
os.remove(file)
: 删除文件, 相当于 linux 下rm
. -
os.access(path, mode)
: 测试是否有权限, mode 包括: os.F_OK (文件存在); os.R_OK (文件可读); os.W_OK (文件可写); os.X_OK (文件可执行).
os.path
有的时候需要去判断一个路径是否是文件夹或者是否是文件, 也可能是把两个路径链接起来构成绝对路径, 这个时候就需要使用 os.path 的方法.
- os.path.join: 以操作系统特定的方式来连接两个路径.
- os.path.abspath: 获取一个文件或者文件夹的绝对路径.
- os.path.relpath: 返回相对于某个路径的相对路径.
- os.path.normpath: 去掉 path 中多余的分隔符等.
- os.path.split: 把路径分成上级文件夹和最后的文件或文件夹并返回, 分隔符号为 os.sep.
- os.path.dirname: 获取一个路径所在的文件夹的名, 即 os.path.split 返回值的第一个.
- os.path.basename: 获取一个路径的最后一个名, 即 os.path.split 返回值的第二个.
- os.path.splitext: 把一个文件的文件名和扩展名分开, 分隔符号为 ".".
- os.path.expanduser: 把家目录的简写还原成绝对路径.
- os.path.realpath: 把路径中的 symbolic link 转换为一般路径.
判断路径类型
os.path 还提供了判断路径的类型的方法.
- os.path.exists: 判断路径所指的文件或文件夹是否存在.
- os.path.isabs: 判断是否是绝对路径.
- os.path.isfile: 判断路径是否是文件.
- os.path.isdir: 判断路径是否是文件夹.
- os.path.islink: 判断路径是否是 symbol link.
- os.path.ismount: 判断路径是否是 mount 文件夹.
- os.path.samefile: 判断两个路径所指文件是否为相同文件.
获取文件信息
- os.path.getatime(): 返回上次访问该文件或文件夹的时间.
- os.path.getctime(): 返回创建文件或文件夹的时间.
- os.path.getmtime(): 返回修改文件或文件夹的时间.
- os.path.getsize(): 返回文件或文件夹的大小.
运行 shell 命令
os.system 和 os.popen 是常用的运行 shell 命令的函数. 对于 os.system, 其只是简单地直接运行该命令, 并且把输出返回到 python 的交互式界面. 而对于 os.popen 则会运行命令并且链接命令的输入输出流.
os.system("ls")
# ['more.py']
os.popen("ls")
# <os._wrap_close object at 0x7f8dcf0ec1d0>
os.popen("ls").read()
# 'more.py\n'
os.system 在运行 shell 命令的时候会等待命令运行完成后才结束, 所以如果要使用 os.system 并行地运行命令, 需要借用 shell 下并行运行命令的方法, 如加上 "&". 而 os.popen 也类似, 也是在和 python 运行环境相同的环境下运行 shell 命令. 例如 os.system("sleep 10")
运行后会等待 10 秒钟才会继续运行接下来的命令, 而 tmp = os.popen("sleep 10"); tmp.read()
也会等待 10 秒钟.
除了直接运行 shell 命令, os.environ 保存了 python 运行的当前 shell 中的环境变量. 使用 dictionary 的方式可以从 os.environ 中获得相应的环境变量的值.