os模块补充说明

引入模块:import os

os.path.abspath(path) 返回path规范化的绝对路径

# 把路径中不符合规范的/改成操作系统默认的格式
path = os.path.abspath('F:/python/python zuoye/day19/z19.py')
print(path)

结果:
F:\python\python zuoye\day19\z19.py

 

# 能够给能找到的相对路径改成绝对路径
path = os.path.abspath('y19/z19.py')
print(path)

结果:
F:\python\python zuoye\day19\y19\z19.py

os.path.split(path) 将path分割成目录和文件名两个元组返回

# 就是把一个路径分成两段,第二段是一个文件/文件夹
path = os.path.split('F:/python/python zuoye/day19/z19.py')
print(path)
path = os.path.split('F:/python/python zuoye/day19')
print(path)

结果:
('F:/python/python zuoye/day19', 'z19.py')
('F:/python/python zuoye', 'day19')

os.path.dirname(path) 返回path的目录,其实就是os.path.split(path)的第一个元素

os.path.basename(path) 返回path最后的文件名,如果path以/或\结尾,那么就会返回空值,即os.path.split(path)第二个元素

ret1 = os.path.dirname('F:/python/python zuoye/day19/z19.py')
print(ret1)
ret2 = os.path.basename('F:/python/python zuoye/day19/z19.py')
print(ret2)

结果:
F:/python/python zuoye/day19
z19.py

 

如果你两个值都需要:os.path.split

如果你只需要一个值:os.path.dirname或os.path.basename

 

os.path.exists(path) 如果path存在,返回True;否则返回False

a = os.path.exists('F:/python/python zuoye/day19/z19.py')
print(a)
a = os.path.exists(r'F:/python/python zuoye/day19/z20.py')
print(a)

结果:
True
False

 

os.path.isabs(path) 如果过path是绝对路径返回True

a = os.path.isabs(r'F:/python/python zuoye/day19/z20.py')
print(a)
a = os.path.isabs(r'day19/z20.py')
print(a)


结果:
True
False

 

os.path.isdir(path) 如果path是个存在的目录,则返回True,否者返回False

os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表的方式打印

print(os.listdir('F:/python/python zuoye/day19'))
print(os.path.isdir('F:/python/day19/z20.py'))
print(os.path.isdir('F:/python/python zuoye/day19'))

结果:
['day19作业 os模块和序列化模块.py', 'z19.py']
False
True

 

os.path.isfile(path) 如果path是个存在的文件返回True,否者返回False

print(os.path.isfile('F:/python/python zuoye/day19/hhh'))
print(os.path.isfile('F:/python/python zuoye/day19/z20.py'))

结果:
True
False

 

os.path.join(path1[, path2[, ...]]) 将多个路径组和后返回,第一个绝对路径之前的参数将被忽略

path = os.path.join('F:/python/python zuoye','hhh')
print(path)

结果:
F:/python/python zuoye\hhh

 

os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间(时间戳格式)

a = os.path.getatime('F:/python/python zuoye/day19/z19.py')
print(a)
b = os.path.getatime('F:/python/python zuoye/day19')
print(b)

结果:
1534844180.2626588
1534844180.4391859

 

os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间(时间戳格式)

a = os.path.getmtime('F:/python/python zuoye/day18/z18.py')
print(a)
b = os.path.getmtime('F:/python/python zuoye/day18')
print(b)

结果:
1534772843.31643
1534834696.077172

 

os.path.getsize(path) 返回path的大小

# 文件
ret = os.path.getsize('F:/python/python zuoye/day19/z19.py')
print(ret)

结果:
9954
ret = os.path.getsize('F:/python/python zuoye/day19')
ret1 = os.path.getsize('F:/python/python zuoye/day18')
ret2 = os.path.getsize('F:/python/python zuoye/day17')
ret3 = os.path.getsize('F:/python/python zuoye')
print(ret,ret1,ret2,ret3)

结果:
4096 0 4096 4096

 

所有文件夹都至少是4096个字节,也有时会是0个字节

最高是8192个字节

 

例题演示:

使用Python代码统计一个文件夹中所有文件的总大小

  拿到文件夹下的所有文件

  是文件就取大小

  是文件夹 再打开这个文件夹: 文件/文件夹

递归:

def func(path):
    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'F:/python/python zuoye/day19')
print(ret)

 

循环,堆栈思想

# 列表 满足一个顺序 先进来的后出去
lst = [r'F:/python/python zuoye/day19',]  # 列表的第一个目录就是我要统计的目录
size_sum = 0
while lst:   # [r'F:/python/python zuoye/day19',]  lst = [r'F:/python/python zuoye/day19'day01',r'F:/python/python zuoye/day19/z19'..]
    path = lst.pop()  # path = 'F:/python/python zuoye/day19' lst = []
    path_list = os.listdir(path)  # path_list = ['z19.py','hhh']
    for name in path_list:  # name = day01
        abs_path = os.path.join(path,name)
        if os.path.isdir(abs_path):   # 文件夹的逻辑
            lst.append(abs_path)        # lst.append('D:\sylar\s15\day01')  lst = ['D:\sylar\s15\day01']
        else:
            size_sum += os.path.getsize(abs_path)
print(size_sum)

 

os模块所做的事情

(1).定制了很多方法,间接的帮助你去调用操作系统的命令,获得结果,然后帮助你分析整理成我们需要的数据类型的形态

(2).你也可以os.popen/os.system直接取调用操作系统的命令,获得结果,但是分析和整理的工作需要自己做

(3).用os模块的方法本身能够完成的功能我们就用定制好的方法就够了

(4).如果有一天,你发现os模块定制好的功能解决不了我们的问题了,而刚好操作系统的命令能够很好的帮助我们解决问题,

这个时候就用os.popen/os.system

posted @ 2018-08-21 19:23  骑驴老神仙  阅读(193)  评论(1)    收藏  举报