在Python中统计某种扩展名的文件数量

60 投票
5 回答
76171 浏览
提问于 2025-04-15 13:49

我刚接触Python,想找个最有效的方法来统计某个子目录下有多少个.TIF文件。

我查了一些资料,发现一个例子(我还没测试过),它声称可以统计一个目录里的所有文件:

file_count = sum((len(f) for _, _, f in os.walk(myPath)))

这个方法可以,但我只想统计TIF文件。我的目录里还有其他类型的文件,但我只想要TIF的数量。

现在我用的是以下这段代码:

tifCounter = 0
for root, dirs, files in os.walk(myPath):
    for file in files:    
        if file.endswith('.tif'):
            tifCounter += 1

这段代码运行得不错,但我觉得循环的部分有点多,效率不太高。有没有更好的方法来做这件事呢?

谢谢。

5 个回答

5

你的代码没问题。

是的,你需要遍历那些文件来筛选出 .tif 文件,不过在内存中遍历一个小数组的工作量和扫描文件夹找到这些文件的工作量相比,几乎可以忽略不计,反正你也得先做这个扫描。

我觉得你不需要太担心优化这段代码。

12

对于这个特定的情况,如果你不想在子目录中进行递归搜索,可以使用 os.listdir

len([f for f in os.listdir(myPath) 
     if f.endswith('.tif') and os.path.isfile(os.path.join(myPath, f))])
84

总之,得有个东西去遍历目录里的所有文件,查看每一个文件的名字——这可以是你自己写的代码,也可以是库里的函数。所以不管具体的解决方案是什么,它们的成本大致是一样的。

如果你觉得代码太多了,而且其实不需要递归地搜索子目录的话,你可以使用 glob 模块:

import glob
tifCounter = len(glob.glob1(myPath,"*.tif"))

撰写回答