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 中获得相应的环境变量的值.




