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)

 

  

posted @ 2018-08-20 14:52  LW-5208  阅读(147)  评论(0)    收藏  举报