Python文件

文件的实战题目来了,稍微有点小综合,不过相信老鸟们都能轻松搞定!对于零基础的同学,难度还好,需要综合前面几章的知识。

假如我们有一个目录里面包含若干个文件和子目录:

问题1:我们要统计该目录下有多少个文件并显示出来(包含子目录)

问题2:该目录总共的大小可以按M,也可以按K显示

问题3:该目录下最大的文件和最小的文件,以及对应的大小

我的目录是:F:\windownshare\Python-3.7.2

def get_size(path):
global sum

file=os.listdir(path)
for i,j in enumerate(file):
    print(j)
    if os.path.isdir(os.path.join(path,j))==True:
        get_size(os.path.join(path,j))

    else:
        size=os.path.getsize(os.path.join(path,j))
        print('------')
        print(j)
        print(size)
        print('------')
        sum = sum + size

print('----------u-')
print('该目录大小为:',sum/1024**2,'M')

def find_max(path):
    file = os.listdir(path)
    max=0
    for i, j in enumerate(file):
        if os.path.isdir(os.path.join(path, j)) == True:
            continue
        else:
            size = os.path.getsize(os.path.join(path, j))
            if size>max:
                max=size
                flag=i
    print("最大的是:"+file[flag])

def find_min(path):
    file = os.listdir(path)
    min=100000000000000000000000
    for i, j in enumerate(file):
        if os.path.isdir(os.path.join(path, j)) == True:
            continue
        else:
            size = os.path.getsize(os.path.join(path, j))
            if  size < min:
                min = size
                flag = i
    print("最小的是:" + file[flag])


def list_file(path):
    file = os.listdir(path)
    for index,value in enumerate(file):
        print(index+1,value)



if __name__ == '__main__':
    sum=0
    size=0
    addresspath = 'F:/windownshare/Python-3.7.2' #改地址为要查询目录地址
    get_size(addresspath)                        #获取大小
    find_max(addresspath)                        #最大文件
    find_min(addresspath)						 #最小文件  
    list_file(addresspath)						#遍历目录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

星主的代码:(理解中)

import os
import time

def get_file_size(file): #定义获取文件大小的函数
    if os.path.exists(file): #检查路径是否真的存在
        return os.path.getsize(file) #返回文件大小
    else:
        print('路径错误')
        return 0

def statist_files(path): #统计文件
    files=[]  #定义一个列表存放文件
    for dirpath,dirname,filename in os.walk(path):
        for file_name in filename:
            files.append(os.path.join(dirpath,file_name))#将所有目录中所有路径名结合文件名放在files的列表里
    return [{'name':f,
             'size':get_file_size(f)} for f in files]   #!!!将files列表里的全部遍历出来
def count_files_size(files_info,size_dispaly_mode='M'):
    sizes=[file_info.get('size',0)for file_info in files_info]
    if size_dispaly_mode=='k' or size_dispaly_mode=='K':
        return str(round(sum(sizes)/1024,3))+'k'  #round函数是一个用于四舍五入的函数,其中3表示保留三位小数  sum函数是将sizes中的相加
    elif size_dispaly_mode=='m' or size_dispaly_mode=='M':
        return str(round(sum(sizes)/(1024*1024),3))+'M'
    elif size_dispaly_mode=='g' or size_dispaly_mode=='G':
        return str(round(sum(sizes)/(1024*1024*1024),3))+'G'
    else:
        return str(round(sum(sizes)))+'byte'

def get_sorted_files(files):
    sorted_files=sorted(files,key=lambda x:x['size'],reverse=True)# 颠倒是从大到小
    return sorted_files

def cost_time(fun):
    def warp():
        start=time.time()
        fun()
        print(f'\ncost time:{time.time()-start}')
    return warp()

def main():
    print('start searching...')
    path='F:/windownshare/Python-3.7.2'
    files_info=statist_files(path)
    print('Total files nums:',len(files_info))
    print('Total files size:',count_files_size(files_info,size_dispaly_mode='M'))
    sorted_files=get_sorted_files(files_info)
    print(f'Max file:{sorted_files[0]}')
    print(f'Min file {sorted_files[-1]}')
    
if __name__ == '__main__':
    main()

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值