我们拥有数十万个文件的硬盘
我需要弄清楚我们有多少文件扩展名
我怎么能用python做到这一点?
我需要它来浏览每个目录。我公司的这位律师需要这个。它可以是整个硬盘的总和,它不必按目录
细分示例:
1232 JPEG
11 exe
45 bat
2342 avi
532 doc
答案 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)生成文件名。