Python - 获取所有目录中的文件扩展名计数

时间:2011-02-04 23:19:38

标签: python

我们拥有数十万个文件的硬盘

我需要弄清楚我们有多少文件扩展名

我怎么能用python做到这一点?

我需要它来浏览每个目录。我公司的这位律师需要这个。它可以是整个硬盘的总和,它不必按目录

细分

示例:

1232 JPEG
11 exe
45 bat
2342 avi
532 doc

5 个答案:

答案 0 :(得分:9)

在os模块中查看os.walk调用并遍历整个目录树。使用os.path.splitext获取扩展程序。维护一个字典,其中键入extension.lower()并增加您遇到的每个扩展的计数。

import os
import collections
extensions = collections.defaultdict(int)

for path, dirs, files in os.walk('/'):
   for filename in files:
       extensions[os.path.splitext(filename)[1].lower()] += 1

for key,value in extensions.items():
    print 'Extension: ', key, ' ', value, ' items'

答案 1 :(得分:2)

import os
from os.path import splitext

extensions = {}
for root, dir, files in os.walk('/'):
    for file in files:
        ext = splitext(file)[1]
        try:
            extensions[ext] += 1
        except KeyError:
            extensions[ext] = 1

使用DefaultDict可能会更好,如果您愿意,可以使用它。

然后您可以像这样打印值:

for extension, count in extensions.items():
    print 'Extension %s has %d files' % (extension, count)

答案 2 :(得分:2)

使用os.walk()浏览文件,使用os.path.splitext()获取扩展程序。你可能也希望lower()扩展,因为至少在我的$ HOME中我有一堆.jpg和一堆.JPG。

import os, os.path, collections
extensionCount = collections.defaultdict(int)
for root, dirs, files in os.walk('.'):
    for file in files:
        base, ext = os.path.splitext(file)
        extensionCount[ext.lower()] += 1
#Now print them out, largest to smallest.
for ext, count in sorted(extensionCount.items(), key=lambda x: x[1], reverse=True):
    print ext, count

答案 3 :(得分:1)

模式很简单。

counter = 0 
for root, dirs, files in os.walk(YourPath):
    for file in files:    
        if file.endswith(EXTENSION):
            counter += 1

您可以使用EXTENSION列表创建一个数组并添加它们。另一种更快捷的方法是创建一个逐渐增长的字典。然后,扩展名是添加值的键。 {jpeg:1232,exe:11}

更新:我们提出的许多解决方案是我们假设字符串是文件类型的正确表示。但我不确定还有其他方法可以做到这一点。迭代应该完成一次,正如下面的评论所述。所以最好一点一点地增长字典

答案 4 :(得分:0)

工作脚本非常简单,我建议你使用os.walk()函数。它的作用是跨目录树(http://docs.python.org/library/os.html)生成文件名。