查询指定目录下文件及文件夹(并输出其所占内存大小)
import os
from os.path import join, getsize
import math
#
# for a,b,c in os.walk(path):
# print(a) #路径
# print(b) #该目录下的文件夹
# print(c) #该目录下的文件
def getdirsize(dir):
size = 0
for root, dirs, files in os.walk(dir): #root路径、dirs文件夹目录列表、files文件目录列表
size += sum([getsize(join(root, name)) for name in files])
return size
def back(path):#返回上级目录
if path.count("\\")>=2:
path = path.rsplit("\\", 1)[0]
return path
else:
print("无法返回上一级")
return path
def calculate_size(path): #计算当前目录 文件/文件夹 的大小
dirs=os.listdir(path)
print(dirs) #打印当前目录 列表
file_list=[]
dir_list=[]
for a in dirs:
full_path=path+"\\"+str(a)
if os.path.isdir(full_path) is True: #如果是文件夹的话
dir_list.append(a)
else: #如果是文件的话
file_list.append(a)
for i in file_list:
file_size=getsize(path+"\\"+str(i))/1024/1024
file_size=round(file_size,2)
print("文件: ",i.ljust(40),"\t\t\t\t",str(file_size).rjust(40)+"MB")
for j in dir_list:
new_path=path+"\\"+str(j)
dir_size=getdirsize(new_path)/1024
dir_size=round(dir_size,2)
j_number=dir_list.index(j)+1
print("文件夹:{}".format(j_number),j.ljust(40),"\t\t\t\t",str(dir_size).rjust(40)+"KB")
while True:
task=eval(input("请输入相应的任务:task1:打开文件夹;task2:返回上一级路径\n"))
if task==1:
a = eval(input("打开第几个文件夹"))
if (a-1) in [i for i in range(len(dir_list))]:
new_path=path + '\\'+str(dir_list[a-1])
calculate_size(new_path)
else:
print("没有该文件夹")
elif task==2:
path=back(path)
calculate_size(path)
# #dirsize=round(getdirsize(full_path) / 1024 / 1024,3)
# dirsize=math.ceil(getdirsize(full_path) / 1024 / 1024)
# dirsize=str(dirsize)+"MB"
# print("文件夹: ",a.ljust(40),'\t\t\t',dirsize.rjust(40))
# filesize=getsize(full_path)
# #filesize=round(filesize/1024/1024,2) #round->四舍五入,2保留两位小数
# filesize=math.ceil(filesize/1024/1024) #向上取整
# filesize=str(filesize)+"MB"
# print("文件: ",a.ljust(40),'\t\t\t',filesize.rjust(40))
if __name__ == '__main__':
path = str(input("请输入你想查询的路径: "))
calculate_size(path)