Python 学习笔记: os

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

By @Wolfson Liu in
Tags : #python,