ljzsdut
GitHubToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeBack to homepage

20.2 Os模块

os模块用于提供操作系统级别的操作:主要提供处理文件、目录的方法

http://www.runoob.com/python/os-file-methods.html

执行命令

  • os.system(“bash command”)

运行shell命令,直接显示。调用完后自身退出,返回值是脚本的退出状态码。

>>> output=os.system('ls /')
Applications	System		Volumes		cores		etc		opt		sbin		usr
Library		Users		bin		dev		home		private		tmp		var
>>> print(output)
0
  • file=os.popen(“ls”)

os.popen()可以实现一个“管道pipe”,从这个命令获取的值可以继续被使用。

因为它返回一个文件对象,可以对这个文件对象进行相关的操作(read()、readline()、readlines()、for遍历),对象内容为脚本执行过程中的输出内容。

#获取ntpd的进程id
os.popen('ps -C ntpd | grep -v CMD |awk '{ print $1 }').readlines()[0]

目录操作

  • os.getcwd()

获取当前工作目录,即当前python脚本所在目录路径,类似shell的pwd命令

  • os.chdir(“dirname”)

改变当前脚本****工作目录****;相当于shell下cd

  • os.curdir

返回当前目录: (’.’),注意是个属性不是方法,所以不带括号。

  • os.pardir

获取当前目录的父目录字符串名:(’..')

  • os.makedirs(‘dir1/dir2’)

可生成多层递归目录,类似shell中mkdir –p dir1/dir2

  • os.mkdir(‘dirname’)

生成单级目录;相当于shell中mkdir dirname

  • os.removedirs(‘dirname1’)

删除非空目录。若目录为空,则删除,并递归到上一级目录,如若也为空,也删除,依此类推。

>>> os.makedirs('/tmp/a/b/c')
>>> os.removedirs('/tmp/a/b/c')  #此时,不仅会删除c,也把b和a目录页删除
>>> os.listdir('/tmp/a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/a'
  • os.rmdir(‘dirname’)

删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname

  • os.listdir(‘dirname’)

列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

文件操作

高级文件操作可以使用shutil模块。

  • os.remove()
  • os.unlink()

删除一个文件

  • os.rename(“oldname”,“new”)

重命名文件/目录

  • os.stat(‘path/filename’)

获取文件/目录信息,os.stat(‘/path/to/file’).st_size

​ stat 结构:

st_mode: inode 保护模式
st_ino: inode 节点号
st_dev: inode 驻留的设备
st_nlink: inode 的链接数
st_uid: 所有者的用户ID
st_gid: 所有者的组ID
st_size: 普通文件以字节为单位的大小包含等待某些特殊文件的数据
st_atime: 上次访问的时间
st_mtime: 最后一次修改的时间
st_ctime: 由操作系统报告的"ctime"在某些系统上如Unix是最新的元数据更改的时间在其它系统上如Windows是创建时间详细信息参见平台的文档)。

操作系统配置

  • os.sep

操作系统特定的路径分隔符,win下为\,Linux下为/

  • os.linesep

当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"

  • os.pathsep

用于分割文件路径的字符串

  • os.name

字符串指示当前使用平台。win->‘nt’; Linux->‘posix’

  • os.environ

获取系统环境变量,例如PATH环境变量:os.environ[“PATH”]

os.path操作

  • os.path.abspath(path)

返回path规范化的绝对路径

  • os.path.split(path)

将path分割成目录和文件名二元组返回(dirname,basename)

  • os.path.dirname(path)

返回path的目录。其实就是os.path.split(path)的第一个元素

  • os.path.basename(path)

返回path最后的文件名。如果path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素

  • os.path.exists(path)

如果path存在,返回True;如果path不存在,返回False

  • os.path.isabs(path)

如果path是绝对路径,返回True

  • os.path.isfile(path)

如果path是一个存在的文件,返回True。否则返回False

  • os.path.isdir(path)

如果path是一个存在的目录,则返回True。否则返回False

  • os.path.join(path1[, path2[, …]])

将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

  • os.path.getatime(path)

返回path所指向的文件或者目录的最后存取时间

  • os.path.getmtime(path)

返回path所指向的文件或者目录的最后修改时间

路径遍历

os.walk(path)

返回值是一个生成器(generator),也就是说我们需要不断的遍历它,来获得所有的内容。

每次遍历的对象都是返回的是一个三元组(root,dirs,files):

  • root 所指的是当前正在遍历的这个文件夹的路径,是一个字符串。
  • dirs 是一个list,内容是该文件夹中所有的目录的名字(不包括子目录)
  • files 同样是list,内容是该文件夹中所有的文件(不包括子目录)
import  os
for dirpath ,dirnames,filenames in os.walk("E:/test"):
    # os.chdir(dirpath)
    print('-->',dirpath)
    for i in filenames:
        src=os.path.join(dirpath,i)
        print(src)
        # print('文件:',i)
    for i in dirnames:
        src=os.path.join(dirpath,i)
        print(src)
        print('目录:',i)