zoukankan      html  css  js  c++  java
  • python_os_shutil_获取文件夹下所有文件的大小

    # sys.argv练习
    # 写一个python脚本,在cmd里执行:
     python xxx.py 用户名 密码 cp 文件路径 目的地址
     python xxx.py alex sb cp D:python_22day221.内容回顾.py D:python_22day21
     python xxx.py alex sb rm D:python_22day22
     python xxx.py alex sb rename D:python_22day22  D:python_22day23
    
    # 使用walk来计算文件夹的总大小
     import os
     g = os.walk('D:python_22')
     for i in g :
         path,dir_lst,name_lst = i
         print(path,name_lst)
    
    
    # 遍历文件夹计算文件夹的总大小方法总结:
    
    # 1- 递归:
    # 获取文件名列表os.listdir(path),遍历文件名列表,获取文件路径os.path.join(path,name),获取文件大小os.path.getsize(abs_path)
    import os
    def show_file_size(path):
        total_size=0
        name_lst = os.listdir(path)
        for name in name_lst:
            abs_path = os.path.join(path,name)  # 获取文件路径
            if os.path.isfile(abs_path):  # 判断是否是文件
                total_size+=os.path.getsize(abs_path)
            elif os.path.isdir(abs_path): # 如果还是文件夹,递归
                # print("here--",abs_path)
                total_size+=show_file_size(abs_path)    # 递归,层层遍历文件夹找文件
        return total_size
    
    total_size=show_file_size(r'C:Users12078PycharmProjectsOldBoyDay22')
    print(total_size, "%.4f MB" % (total_size/1024/1024))
    
    # 2- os.walk (os.walk()是一个生成器函数):
    import os
    
    g = os.walk(r'C:Users12078PycharmProjectsOldBoyDay22')
    full_size=0
    for i in g :  # os.walk()是一个生成器函数  i可以替换为:path,dir_lst,file_lst
        path,dir_lst,file_lst = i  # 解包
        # print(path,dir_lst,file_lst)
        # print(file_lst)  # 虽然返回的是两个list(因为有子文件夹)但可以一起遍历!
        for filename in file_lst:
            full_size+=os.path.getsize(os.path.join(path,filename))
    print(full_size, "%.4f MB" % (full_size/1024/1024))
    
    
    # 优化如下:
    import os
    g = os.walk(r'C:Users12078PycharmProjectsOldBoyDay22')
    full_size = 0
    for path, dirs_list, files_list in g:
        for file in files_list:
            fullname = os.path.join(path, file)
            full_size +=os.path.getsize(fullname)
    print(full_size, "%.4f MB" % (full_size/1024/1024))
    # 把里层的for循环写成迭代器,再用sum来替代 full_size += file_size :
    
    
    import os
    folder_path = r'C:Users12078PycharmProjectsOldBoyDay22'
    full_size = sum(sum(os.path.getsize(os.path.join(parent, file)) for file in files) for parent, dirs, files in os.walk(folder_path))
    print(full_size, "%.4f MB" % (full_size/1024/1024))
    # 使用sum求和的时候会把生成器的所有元素生成出来,相当于使用了 for i in g
    
    
    
    # 3- shutil模块:获取磁盘使用空间(注意是磁盘的空间,不是文件夹或文件的大小,即便给的路径参数是文件夹或文件的绝对地址,计算的也是路径所在磁盘的空间)
    # total, used, free = shutil.disk_usage(".")  # 解包
    # print("当前磁盘共: %iGB, 已使用: %iGB, 剩余: %iGB"%(total / 1073741824, used / 1073741824, free / 1073741824))
    import shutil
    total_size, used_size, free_size = shutil.disk_usage(r'C:Users12078PycharmProjectsOldBoyDay22')
    print(total_size, "%.4f MB" % (total_size/1024/1024))
    
    
    
  • 相关阅读:
    Informix IDS 11系统办理(918考试)认证指南,第6部分:IDS备份和恢复(1)
    Informix IDS 11体系处置(918检验)认证指南,第 4 局部: 性能调优(7)
    我常用网址整理
    System.Insert 插入字符串
    System.Length 获取字符串或数组的长度
    System.New、System.Dispose 为某个指针申请和释放内存
    System.GetMem、System.FreeMem 申请和释放内存
    学习 TList 类的实现[1]
    学习 TList 类的实现[2]
    System.ReallocMem 重新申请内存
  • 原文地址:https://www.cnblogs.com/Collin-pxy/p/13034355.html
Copyright © 2011-2022 走看看