【问题标题】:Python: Recursively count all file types and sizes in folders and subfoldersPython:递归计算文件夹和子文件夹中的所有文件类型和大小
【发布时间】:2020-06-23 00:54:50
【问题描述】:

我正在尝试按类型和所有大小计算目录和任何子目录中的所有文件

输出应该是一个看起来像这样的表格:

Directory A             
Number of subdirectories: 12    

|Type|  Count|  TotalSize/kb    |FirstSeen  |LastSeen  |
|----|-------|------------------|-----------|----------|
|.pdf|  8    |80767             |1/1/2020   |2/20/2020 | 
|.ppt|  9    |2345              |1/5/2020   |2/25/2020 |
|.mov|  2    |234563            |1/10/2020  |3/1/2020  | 
|.jpg|  14   |117639            |1/15/2020  |3/5/2020  |
|.doc|  5    |891               |1/20/2020  |3/10/2020 |

抱歉,为了便于阅读,我试图将其转换为表格格式。但是每条记录都以在目录中找到的文件类型开头。

【问题讨论】:

  • 那么,到目前为止,您尝试了什么,结果如何?
  • 我为一个目录上的 os.walk() 运行了一个 for 循环。我从那里获得了所有文件名,我将运行一个 .split() 方法来解析扩展名并尝试以这种方式计算它们,但这并没有给我该文件的其余目录信息。而且我认为可能还有一种更优雅的方法。
  • >>> os.stat('zappa') posix.stat_result(st_mode=33261, st_ino=17836558, st_dev=2065L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=1122896, st_atime=1558260586, st_mtime=1125048678, st_ctime=1475298458) -- 你还需要什么吗?
  • posix 是我需要定义的东西吗?
  • 我需要文件扩展名的实际计数和每个扩展名的累积大小。除非我从那里的 stat_result() 输出中遗漏了一些东西,否则我似乎遗漏了它

标签: python directory subdirectory


【解决方案1】:

这应该完全符合您的要求,计算扩展映射的大小。把它整理好,按照你喜欢的方式漂亮地打印出来,你就完成了。

import os

def scan_dir(root_dir):
    # walk the directory
    result = {}
    for root, dirs, files in os.walk(root_dir):
        # count the files size
        for file in files:
            path = os.path.join(root, file)
            ext = os.path.splitext(file)[1].upper()
            size = os.stat(path).st_size
            result[ext] = (result[ext] if ext in result else 0) + size
    return result

print(scan_dir("."))

编辑:这不会为您收集最小/最大时间戳,也不会计算文件,但这确实应该让您走上正确的轨道。

【讨论】:

  • 使用os.walk()时不用手动扫描文件夹——for dir in dirs基本没用
  • @lenik,你说得对,实际上,它比没用更糟糕,它会多次计算尺寸。感谢您的关注,删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多