os模块 具体方法详细说明 (有3类) :
os 模块使用需要导入 : import os
1.文件和文件夹的处理
.mkdir() .makedirs()
import os
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")
os.popen("bash command").read()
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 in name_lst:
path_abs = os.path.join(path,name)
if os.path.isdir(path_abs):
size = func(path_abs)
size_sum += size
else:
size_sum += os.path.getsize(path_abs)
return size_sum
ret = func(r'D:\sylar\s15')
print(ret)
# 循环 # 堆栈思想
# 列表 满足一个顺序 先进来的后出去
lst = [r'D:\sylar\s15',] # 列表的第一个目录就是我要统计的目录
size_sum = 0
while lst:
path = lst.pop()
path_list = os.listdir(path)
for name in path_list:
abs_path = os.path.join(path,name)
if os.path.isdir(abs_path):
lst.append(abs_path)
else:
size_sum += os.path.getsize(abs_path)
print(size_sum)