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)