os模块
os模块时与操作系统交互的一个接口
一、文件相关方法:
1、os.makedirs('dirname1/dirname2') 可生成多层递归目录
import os os.makedirs('dir1/dir2')
2、os.removedirs('dirnaem1') 若目录为空,则删除,并递归到上一级目录若上一级目录也为空,则删除,以此类推。
import os os.removedirs('dir1/dir2') os.removedirs('dir3/dir4')
3、os.mkdir('dirname') 生成单级目录,相当于shell中的mkdir dirname
import os os.mkdir('dir3') os.mkdir('dir3/dir4')
4、os.rmkdir('dirname') 删除单级空目录,如果目录不为空则无法删除,报错。
import os os.rmdir('dir3/dir4')
5、os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
import os file_list = os.listdir('D:\py\Modular') for el in file_list: print(os.path.join('D:\py\Modular',el))
6、os.remove() 删除一个文件
import os os.remove('文件名')
7、rename('oldname','newname') 重命名文件或目录
import os os.rename('a.txt','b.txt')
8、os.stat('path/filename') 获取文件/目录信息
import os print(os.stat(r'D:\py\Modular\os模块\test.py'))
二、命令终端相关:
1、os.system('bash command') 运行shell命令,直接显示(执行字符串数据类型的命令行代码)
import os os.system('dir') # 执行操作系统的命令,没有返回值,实际操作/删除文件,创建一个文件夹(exec)
2、os.popen('bash command').read() 运行shell命令,获取执行结果 (执行字符串数据类型的命令行代码)
import os ret = os.popen("dir") s = ret.read() print(s) print(s.split('\n'))
3、os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
import os print('--->',os.getcwd()) #当前工作目录
4、os.chdir('dirname') 改变当前脚本工作目录,相当于shell下的cd
import os print(os.chdir('D:\py\Modular')) #切换当前工作目录
三:路径相关:
1、os.path.abspath(path) 返回path规范化的绝对路径;能够把能找到的相对路径改成绝对路径
import os path = os.path.abspath('D:\py\Modular\os模块\\test.py') print(path)
#相对路径改成绝对路径 path = os.path.abspath('test.py') print(path) # 结果:D:\py\Modular\os模块\test.py
2、os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素。
import os ret1 = os.path.dirname('D:\py\Modular\os模块\\test.py') ret2 = os.path.basename('D:\py\Modular\os模块\\test.py') print(ret1) #路径 # 结果:D:\py\Modular\os模块 print(ret2) #文件 # 结果:test.py
@如果需要两个值,os.path.split
@如果你只要一个值,os.path.dirname/os.path/basename
3、os.path.basename(path) 返回path最后到的文件名,如何path以/或\结尾,那么就会返回空值,即os.path.split(path)的第二个元素。
import os ret1 = os.path.dirname('D:\py\Modular\os模块\\test.py') ret2 = os.path.basename('D:\py\Modular\os模块\\test.py') print(ret1) # 结果:D:\py\Modular\os模块 print(ret2) # 结果:test.py
@如果需要两个值,os.path.split
@如果你只要一个值,os.path.dirname/os.path/basename
4、os.path.split(path):将path分割成目录和文件名两个元组返回。把一个路径分成两段,第二段是一个文件或者文件夹
import os path1 = os.path.split('D:\py\Modular\os模块\zuoye.py') print(path1) # 结果:('D:\\py\\Modular\\os模块', 'zuoye.py') path2 = os.path.split('D:\py\Modular\os模块') print(path2) # 结果:('D:\\py\\Modular', 'os模块')
@如果需要两个值,os.path.split
@如果你只要一个值,os.path.dirname/os.path/basename
5、os.path.exists(path):如果path存在,返回True,否则返回false。
import os ret1 = os.path.exists('D:\py\Modular\os模块\zuoye.py') print(ret1) # 结果:True
6、os.path.isabs(path):如果path是一个绝对路径,返回True
import os res1 = os.path.isabs('test.py') res2 = os.path.isabs('D:\py\Modular\os模块\\test.py') print(res1) # 结果:False print(res2) # 结果:True
7、os.path.isfile(path):如果path是一个存在的文件,返回True,否则返回False
import os res1 = os.path.isfile('test.py') res2 = os.path.isfile('D:\py\Modular\os模块') print(res1) # 结果:True print(res2) # 结果:False
8、os.path.isdir(path):如果path是一个存在的目录,则返回True,否则返回False。
import os res1 = os.path.isdir('test.py') res2 = os.path.isdir('D:\py\Modular\os模块') print(res1) # 结果:False print(res2) # 结果:True
9、os.path.join(path1[,path2[,...]]):将多个路径组合后返回,第一个绝对路径之前的参数将会被忽略
import os path = os.path.join('D:\py\Modular\os模块\\test.py','bbb') print(path) # 结果:D:\py\Modular\os模块\test.py\bbb
10、os.path.getatime(path):返回path所指向的文件或者目录的最后访问时间
11、os.path.getmtime(path):返回path所指向的文件或者最后修改的时间
12、os.path.getsize(path):返回path的大小
import os ret1 = os.path.getsize('D:\py\Modular') ret2 = os.path.getsize('D:\py\Modular\sys模块\\test.py') ret3 = os.path.getsize('D:\py\Modular\\random模块\\test.py') ret4 = os.path.getsize('D:\py\Modular\\time模块\\test.py') print(ret1,ret2,ret3,ret4)
@ 使用python代码统计一个文件夹中所有文件的总大小 。
思路:统计文件夹大小、拿到这个文件夹下的所有文件夹和文件,是文件就取大小,是文件夹在打开这个文件夹。
方法一:递归
import os def func(path): size_sum = 0 name_lst = os.listdir(path) for el in name_lst: path_abs = os.path.join(path,el) 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:\py\Modular') print(ret)
方法二:循环(堆栈思想)
import os lst = [r'D:\py\Modular',] #列表满足一个顺序,先进来的后出去。列表的第一个目录就是要统计的目录 size_sum = 0 while lst: #[r'D:\py\Modular',] lst = [r'D:\py\Modular\os模块',r'D:\py\Modular\sys模块',...] path = lst.pop() #path = 'D:\py\Modular' lst = [] path_lst = os.listdir(path) #path_lst = ['os模块','sys模块'...] for el in path_lst: #el = day01 ... abs_path = os.path.join(path,el) if os.path.isdir(abs_path): #文件夹的逻辑 lst.append(abs_path) #lst.append('D:\py\Modular\os模块') lst = ['D:\py\Modular\os模块'] else: size_sum += os.path.getsize(abs_path) print(size_sum)
浙公网安备 33010602011771号