os模块 具体方法详细说明 (有3类) :
os 模块使用需要导入 : import os
1.文件和文件夹的处理
.mkdir() .makedirs() 创建文件夹
importos
os.makedirs('dir1/dir2') #makedirs() 可以同时创建2个文件夹,且可以是包含关系
os.mkdir('dir3') #首先创建一个dir3文件夹
os.mkdir('dir3/dir4') #mikdir() 想要文件夹内创建文件夹,要保证dir3是存在的
结果展示 :
.rmdir() .removedirs() 删除文件夹
#只能删空文件夹
os.rmdir('dir3/dir4') #rmdir 仅删除dir3中的dir4文件夹,
os.removedirs('dir3/dir4') #removedirs dir3和dir4 同时删除,
#若dir3中有其他的文件如a.txt, 则只删除dir4文件夹
os.listdir() 查看当前目录下的所有文件夹和文件
os.path.join() 上下级目录进行重组
file_lst = os.listdir('D:\sylar\s15') #获取是s15文件夹下的文件名称
for path in file_lst: #遍历文件名
print(os.path.join('D:\sylar\s15',path)) #文件名与上级路径进行重组
2. 执行操作系统的命令:
os.system ("bash command") 运行shell命令,直接显示
os.popen("bash command").read() 运行shell命令,获取执行结果
os模块所做的事情
定制了很多方法 间接的帮助你去调用操作系统的命令 获得结果
然后帮助你分析整理成我们需要的数据类型的形态
你也可以os.popen/os.system直接取调用操作系统的命令 获得结果
但是 分析和整理的工作需要你自己做
用os模块的方法本身能够完成的功能我们就用定制好的方法就够了
如果有一天 你发现os模块定制好的功能解决不了我们的问题了
而刚好操作系统的命令能够很好地帮助我们解决问题
这个时候就用os.popen/os.system
作用
os.system()和os.popen() 执行字符串数据类型的 命令行代码
eval()和exec() 执行的是字符串数据类型的 python代码
# 统计文件的大小
# os.path.getsize('路径') # python的命令
# dir 路径 \C # 操作系统的命令
# 帮助你显示当前路径下的所有文件和文件夹
# os.system('dir 路径') # 使用python语言直接执行操作系统的命令
# os.listdir('路径') # 使用python语言的os模块提供的方法 间接调用了操作系统命令
os.system('dir') #执行操作系统的命令,没有返回值,
#直接进行实际的操作, 如删除和创建一个文件夹
#程序要处理这些路径
ret = os.popen('dir') #是和做查看类的操作
s =ret.read()print(s) #文件目录信息
文件目录结果展示 :
os.getcwd() 获取当前执行命令的时候所在的目录
os.chdir() 修改当前执行命令的时候所在的目录
print('-->',os.getcwd()) #current work dir 当前工作目录#并不是指当前文件所在的目录,而是当前文件是在哪个目录下执行的
ret = os.popen('dir') #是和做查看类的操作
s =ret.read()print(s)
os.chdir('D:\sylar\s15\day18') #切换当前的工作目录
ret = os.popen('dir') #是和做查看类的操作
s =ret.read()print(s)
3.路径的处理
os.path.abspath (path) 将路径中不符合规范的改成操作系统中默认的格式
能够将找到的相对路径改成绝对路径
path = os.path.abspath(r'E:\A学习\python--study\untitled\code\4.os模块.py')print(path)
path= os.path.abspath(r'4.os模块.py')print(path)# E:\A学习\python--study\untitled\code\4.os模块.py
# E:\A学习\python--study\untitled\code\4.os模块.py
os.path.split (path) 将一个路径分成两段,第二段是一个文件或文件夹 (路径中最里层的) 返回元组形式
os.path.dirname (path) 获取两段路径中的第一个
os.path.basename (path) 获取两段中的第二个(文件或文件夹)
# 如果你两个值都需要 os.path.split
# 如果你只要一个值 os.path.dirname/os.path.basename
path= os.path.split(r'E:\A学习\python--study\untitled\code\4.os模块.py')
ret1= os.path.dirname(r'E:\A学习\python--study\untitled\code\4.os模块.py')
ret2= os.path.basename(r'E:\A学习\python--study\untitled\code\4.os模块.py')print(path)print(ret1)print(ret2)# ('E:\\A学习\\python--study\\untitled\\code', '4.os模块.py')
# E:\A学习\python--study\untitled\code
# 4.os模块.py
os.path.exists (path) 判断文件或文件夹是否存在, 参数为文件的路径(相对或绝对都可以)
os.path.isabs (path) 判断文件或文件夹是否存在, 路径只能是 绝对路径
res = os.path.exists(r'4.os模块.py')print(res) #True
res1 = os.path.isabs('4.os模块.py')
res2= os.path.isabs(r'D:\sylar\s15\day19\4.os模块.py')print(res1) #False
print(res2) #True
os.list.dir (path) 展示目录下的文件或文件夹
os.path.join (path,文件名) 上下级目录进行重组
os.path.isdir (path) 判断是否为文件夹
os.path.isfile (path) 判断是否为文件
print(os.path.isdir(r'D:\sylar\s15\aaa'))print(os.path.isfile(r'D:\sylar\s15\aaa'))print(os.path.isfile('D:\sylar\s15\day01'))print(os.path.isdir('D:\sylar\s15\day01'))
os.path.getsize (path) 查看文件的大小 只能查看文件不能查看文件夹
size= os.path.getsize(r'E:\A学习\python--study\untitled\code\4.os模块.py') #查看文件大小
print(size) #4321 字节
如果要查看文件夹的大小 : 需要打开文件夹一层层统计文件的大小
# 使用python代码统计一个文件夹中所有文件的总大小
# 你需要统计文件夹大小
# D:\sylar\s15\ 文件夹的大小
# 拿到这个文件夹下所有的文件夹 和 文件
# 是文件就取大小
# 是文件夹 再打开这个文件夹 : 文件/文件夹
♥♥♥♥♥♥ 重点
#递归方法
def func(path): #r'D:\sylar\s15'
size_sum =0
name_lst=os.listdir(path)for name inname_lst:
path_abs=os.path.join(path,name)ifos.path.isdir(path_abs):
size=func(path_abs)
size_sum+=sizeelse:
size_sum+=os.path.getsize(path_abs)returnsize_sum
ret= func(r'D:\sylar\s15')print(ret)#循环 # 堆栈思想#列表 满足一个顺序 先进来的后出去
lst = [r'D:\sylar\s15',] #列表的第一个目录就是我要统计的目录
size_sum =0whilelst:
path=lst.pop()
path_list=os.listdir(path)for name inpath_list:
abs_path=os.path.join(path,name)ifos.path.isdir(abs_path):
lst.append(abs_path)else:
size_sum+=os.path.getsize(abs_path)print(size_sum)