查找目录中具有特定扩展名的文件的总大小?

时间:2018-05-12 17:53:22

标签: python

我想总结与特定扩展名匹配的文件的大小(并为多个扩展名执行此操作)。下面是部分工作代码,但我需要帮助将其应用于目录中的所有扩展。

example.com

所以我想最终得到包含总txt或mp3文件数据值的变量。类似的东西:

import glob
import os

path = '/tmp'
files = glob.glob(path + "/**/*.txt")
total_size = 0
for file in files:
    total_size += os.path.getsize(os.path.join(path, file))
print len(files), total_size

谢谢!

2 个答案:

答案 0 :(得分:1)

我冒昧地假设您的意图是找到与目录中某些扩展名相匹配的所有文件的大小总和(我的待审编辑将反映您的问题如果获得批准):

import glob
import os


def summed_sizes(extensions: list, directory: str='.'):
    total = 0

    grouped_files = [glob.glob(os.path.join(directory, f"**/*.{ext}")) for ext in extensions]

    for ext_group in grouped_files:
        for file in ext_group:
            total += os.path.getsize(file)

    return total


print(summed_sizes(['jpg', 'txt'], '/tmp'))

答案 1 :(得分:1)

您可以搜索子目录中的所有名称并自行过滤扩展名。 glob通过将所有名称与fnmatch进行比较来做类似的事情。请注意,glob会返回完整路径,因此您无需再次添加。您可以使用列表推导来构建列表。

import glob
import os

path = '/tmp'
extensions = set(('.txt', '.foo', '.bar'))

files = [fn for fn in glob.glob(path + "/**/*")
    if os.path.splitext(fn)[1] in extensions]
total_size = sum(os.path.getsize(fn) for fn in files)
print len(files), total_size
相关问题