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