簡體   English   中英

查找目錄中具有特定擴展名的文件的總大小?

[英]Find summed size of files with specific extensions within a directory?

我想對與特定擴展名匹配的文件大小求和(並為多個擴展名這樣做)。 下面是部分工作代碼,但我需要幫助將其應用於目錄中的所有擴展。

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

所以,我想最終得到包含 .txt 或 .mp3 文件數據總量值的變量。 就像是:

Data1[] = { .mp3, 1209879834 bytes);
Data2[] = { .txt, 134213443 bytes);
DataX[] = { .X, X bytes);

我冒昧地假設您的意圖是找到與目錄中特定擴展名集匹配的所有文件的大小總和(如果批准,我對您的問題的待定編輯將反映這一點):

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'))

您可以搜索子目錄中的所有名稱並自行過濾擴展名。 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM