目录

1:获取模块帮助文档

2:常用os模块工具

      2.1:os模块功能汇总

2.2:系统相关

2.3:文件和目录相关

2.3.1:文件和目录管理工具

2.4:运行程序

2.4.1:os.system

2.4.2:os.popen

os模块是Python标准库中与操作系统交互及访问操作系统相关功能的模块。

1:获取模块帮助文档

import os

# 1:查看os模块的帮助
print(os.__doc__)

# 2:列出所有的属性及方法
print(dir(os))

# 3:一行一个列出
for item in dir(os):
	print(item )


# 4:查看某个函数
print(help(os.system))

2:常用os模块工具

      2.1:os模块功能汇总

大类

小类

函数

说明

系统相关

shell变量

os.environ

获取系统环境变量

 

os.name

查看当前操作系统的名称。windows平台下返回‘nt’,Linux则返回‘posix’。

移植相关

os.sep

当前平台的路径分隔符。在windows下,为‘\’,在POSIX系统中,为‘/’。

os.pathsep

PATH环境变量中的分隔符,在POSIX系统中为‘:’,在Windows中为‘;’。

os.extsep

文件名和文件扩展名之间分隔的符号,在Windows下为‘.’。

os.linesep

行结束符。在不同的系统中行尾的结束符是不同的,例如在Windows下为‘\r\n’。

 os.devnull

在不同的系统上null设备的路径,在Windows下为‘nul’,在POSIX下为‘/dev/null’。

os.defpath

当使用exec函数族的时候,如果没有指定PATH环境变量,则默认会查找os.defpath中的值作

文件和目录相关

管理工具

 

os.getcwd()

获取当前工作目录 

os.chdir(r"C:\Program Files (x86)")

改变当前脚本工作目录;

os.curdir

返回当前目录: ('.')

os.pardir

获取当前目录的父目录:('..')

os.mkdir('dirname')

生成单级目录

os.rmdir('dirname')

删除单级空目录,若目录不为空则无法删除并报错

os.listdir(r"D:\python")

列出指定目录下的所有文件和子目录(不包括子目录下的子目录),包括隐藏文件。

os.makedirs('dir1/dir2')

可生成多层递归目录

os.removedirs(‘dirname1’)

递归删除空目录

os.stat('path/filename')

获取文件/目录信息

os.chmod(path, mode)

改变path的权限

os.mkfifo(path[, mode])

创建新的命名管道,并设置权限模式(以数字模式)

os.access(path, mode);

测试path是否存在,是否可读,可写,可执行。

os.getpid()

获取当前进程的进程id

os.remove('filename')

删除一个文件

os.rename("oldname","new")

重命名文件/目录

路径名工具

os.path.exists(path或者file)

检测目录或文件是否存在

os.path.isdir(path)    

判断目录是否存在;目录存在返回True,否则返回False

os.path.isfile(file)

判断文件是否存在;

os.path.abspath(path)

返回path的绝对路径;如os.path.abspath(os.curdir)

os.path.isabs(path)

判断path是否是绝对路径

os.path.split(path)

将path分割成目录和文件名二元组返回;(以path中最后一个os.sep为分隔点)

os.path.dirname(path)

返回path中最后一个os.sep左边的值。其实就是os.path.split(path)的第一个元素;(以path中最后一个os.sep为分隔点)

os.path.basename(path)

返回path中最后一个os.sep右边的值。os.path.split(path)的第二个元素;(以path中最后一个os.sep为分隔点)

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

将多个路径组合后返回(拼接路径);

os.path.getatime(path)

最后存取时间

os.path.getmtime(path)

最后修改时间

os.path.getsize(filename)

文件包含的字符数量

os.walk(path)

返回一个三元元组(dirpath, dirnames, filenames)

运行程序

 

os.system

执行命令,阻塞方式执行,返回命令的退出状态,不能获取命令中输出的结果

os.popen

执行命令,非阻塞,调用read才执行,可获取命令中输出结果,但不能获取命令的退出状态

os.startfile("test.py")

打开一个任意类型的文件,与鼠标单击它的图标一样

os.spawnv

启动带有底层控制的新程序,可选os.P_WAIT,os.P_NOWAIT 阻塞与非阻塞方式。

os.execv

 

os.execlp

 

派生进程

 

os.kill

 

 

os.pipe

管道,负责程序间通信

 

os.waitpid

 

文件描述符

 

os.open

 

 

os.read

 

 

os.write

 

 

os.dup2

 

2.2:系统相关

print("1:",os.name)
print("2:",os.sep)
print("3:",os.pathsep)
print("4:",os.extsep)
print("5:",os.linesep)
print("6:",os.devnull)
print("7:",os.defpath)

"""
输出结果(win10操作系统):
1: nt
2: \
3: ;
4: .
5: 


6: nul
7: .;C:\bin
"""

2.3:文件和目录相关

2.3.1:文件和目录管理工具

# encoding=gbk
import os

print('--1--','*'*50)
print(os.getcwd())  # 获取当前工作目录
print(os.chdir(r"C:\Program Files (x86)"))  #  改变当前工作目录,os.chdir的返回值为None
print(os.getcwd())   # 输出是os.chdir 改变的工作目录
print(os.chdir(r".."))  #  改变当前工作目录为上级目录
print(os.getcwd())   #
print(os.curdir)   #  输出 .
print(os.pardir)   #  输出 ..

print('--2--','*'*50)
print(os.chdir(r"D:\python\test")) # 改变当前目录为
print(os.getcwd())
# print(os.mkdir(r'dir5')) # 在当前工作目录下创建目录,不能同时创建多级目录,返回值为None;当目录存在时会抛出异常:FileExistsError
# print(os.rmdir('dir3')) # 在当前工作目录下删除指定目录,也可以指定绝对目录,返回值为None;当目录不存在时 抛出异常:FileNotFoundError
print(os.listdir(r"D:\python\test"))  # 列出当前目录下的所有目录及文件,不包含其子目录下的目录,文件;


# print(os.makedirs('dir6/dir8'))   # 创建多级目录,当最后一级目录存在时,抛出异常:FileExistsError
# print(os.removedirs('dir6/dir5'))  # 删除多级目录:最后一级目录不存在时,抛出FileNotFoundError;最后一级存在,首先删除最后一级目录,如上一级下没有子目录,就把上一级删除,否则不删除

print(os.remove('filename'))  #  删除文件,文件不存在抛出异常:FileNotFoundError
print(os.rename("ixusy88-1.txt","ixusy88-new.txt")) # 修改文件名;FileNotFoundError

print(os.stat(r"D:\python\test"))       # 查看目录的信息:大小,创建时间,修改时间等等。
print(os.stat(r"D:\python\test\ixusy88.txt"))  # 查看文件的信息:大小,创建时间,修改时间等等。

print(os.getpid())  # 获取进程id

2.3.2:路径名工具

# encoding=gbk
import os

print(os.chdir(r"D:\python\test")) # 改变当前目录为 D:\python\test
print(os.getcwd())

print(os.path.exists(r"D:\python\test1"))  # 判断目录是否存在
print(os.path.exists(r"D:\python\test1\ixusy88.txt"))  # 判断文件是否存在

print(os.path.isdir(r"D:\python\test\dir1")) # 判断目录是否存在:目录存在返回True,其他情况返回False

print(os.path.isfile(r"D:\python\test\dir1")) # 判断文件是否存在:文件存在返回True,其他情况返回False

print(os.path.abspath(r"dir1"))  # 返回dir1的绝对路径

print(os.path.isabs(r"dir1"))  # 判断是否是绝对路径
print(os.path.isabs(r"D:\python\test\dir1"))  # 判断是否是绝对路径

# 以路径中最后一个os.sep对路径进行分割,如下:
print(os.path.split(r"D:\python\test\dir1\ddd.txt"))  # 输出 :('D:\\python\\test\\dir1', 'ddd.txt')
print(os.path.split(r"D:\python\test\dir1\\")) # 输出:('D:\\python\\test\\dir1', '')
print(os.path.split(r"D:\python\test\dir1"))  # 输出:('D:\\pytho n\\test', 'dir1')

#
print(os.path.dirname(r"D:\python\test\dir1\ddd.txt"))  # 输出 : D:\python\test\dir1
print(os.path.dirname(r"D:\python\test\dir1\\")) # 输出:D:\python\test\dir1
print(os.path.dirname(r"D:\python\test\dir1"))  # 输出: D:\python\test

print(os.path.basename(r"D:\python\test\dir1\ddd.txt"))  # 输出 :ddd.txt
print(os.path.basename(r"D:\python\test\dir1\\")) # 输出: 空的
print(os.path.basename(r"D:\python\test\dir1"))  # 输出: dir1

ret = os.path.join('dir11','dir12','dir113')
print(ret)  # 输出 dir11\dir12\dir113
ret = os.path.join(os.getcwd(),'dir11','dir12','dir113')
print(ret) # 输出  D:\python\test\dir11\dir12\dir113

print(os.path.getatime(os.getcwd()))
print(os.path.getmtime(os.getcwd()))
print(os.path.getsize(os.getcwd()))

print('*' * 60)
# os.walk 递归列出目录下的所有目录,文件,及子目录下的目录文件。
for item in os.walk(os.getcwd()):
    print(item)
上面os.walk的运行结果如下:

2.4:运行程序

2.4.1:os.system

# encoding=gbk
import os


# 执行命令,能在命令行中执行的命令
# 阻塞的方式执行,能获取命令执行的退出状态,不能获取命令执行过程中的输出。
print(os.system('ipconfig')) #
print(os.system('ping blog.csdn.net')) #
print(os.system('msconfig'))  # 打开系统配置,程序会一直卡在这里,直到关闭配置界面,

# 运行程序,不会阻塞
print(os.system('calc')) # 打开计算器
print(os.system('start calc'))
print(os.system('start C:\FeiQ.exe'))


# 打开文件,会阻塞
print(os.system('wifi.txt'))
print(os.system('wifi2.txt'))


"""
# 测试os.system的返回值:
在同级目录下创建:test.py文件
import sys

print('in test ')
sys.exit(3)

"""

print(os.system('python test.py'))  # 此处的输出为 3,即os.system的返回值为所执行命令的退出(终止)状态码

2.4.2:os.popen

os.popen会打开一个管道。 其执行是非阻塞的,其返回一个可迭代对象,可以像读取文件一样,读取命令的输出结果。

语法格式:
os.popen(cmd, mode='r', buffering=-1)     
参数说明:
command --- 调用的命令;
mode --- 模式权限可以是 'r'(默认) 或 'w';
bufsize -- 指明了文件需要的缓冲大小:0意味着无缓冲;1意味着行缓冲;其它正值表示使用参数大小的缓冲(大概值,以字节为单位);负的bufsize意味着使用系统的默认值。

# encoding=gbk

import os
cmd = 'ipconfig'
ret = os.popen(cmd)
# 这个迭代器,只能迭代一遍:

# 1:读取所有行,返回一个列表
# print(ret.readlines())

# 2:读取所有行,返回一个字符串;read会阻塞
# str = ret.read()
# print(type(str),str)

# 3:迭代一次读取一行
# for item in ret:
#     print(item)
#     print('*'*10)

# 上面的1:,2:,3:只会有一个输出

# 最后关闭,
ret.close()

print('='*30)
# 也可以使用 with来执行
with os.popen(cmd) as p:
    for item in p:
        print(item)
        print('*'*20)