如何扩展Python代码统计目录下各扩展名文件总大小?
统计目录下所有扩展名的文件总大小
没问题,我帮你调整代码,让它能自动统计目标目录下所有存在的扩展名对应的文件总大小,最终会得到一个清晰的字典结构,完全匹配你想要的“扩展名-总字节数”对应关系:
import os def calculate_size_by_extension(path): # 用字典存储每个扩展名对应的总大小,键是扩展名(比如'.txt'),值是总字节数 size_by_ext = {} # 遍历目标目录下的所有文件(包括子目录) for root, dirs, files in os.walk(path): for file in files: file_path = os.path.join(root, file) # 跳过符号链接,避免统计无效文件的大小 if os.path.islink(file_path): continue # 提取文件扩展名 _, ext = os.path.splitext(file) # 如果需要忽略大小写(比如把.TXT和.txt归为一类),可以取消下面这行的注释 # ext = ext.lower() # 获取文件大小并累加 file_size = os.path.getsize(file_path) if ext in size_by_ext: size_by_ext[ext] += file_size else: size_by_ext[ext] = file_size return size_by_ext # 示例使用 target_path = '/tmp' extension_sizes = calculate_size_by_extension(target_path) # 打印结果,方便查看 for ext, total_size in extension_sizes.items(): print(f"{ext}: {total_size} bytes") # 你可以直接使用extension_sizes这个变量,比如取.mp3的总大小: # if '.mp3' in extension_sizes: # print(f".mp3总大小:{extension_sizes['.mp3']} bytes")
代码说明:
- 用
os.walk遍历目录,比glob更稳妥,能覆盖所有子目录的文件 - 字典
size_by_ext会自动记录每个扩展名的总大小,不需要提前指定要统计的扩展名 - 加入了跳过符号链接的判断,避免获取无效文件的大小
- 如果需要不区分扩展名大小写(比如把
.TXT和.txt算成一类),可以取消ext = ext.lower()这行的注释
示例输出:
运行后你会得到类似这样的结果:
.txt: 134213443 bytes .mp3: 1209879834 bytes .jpg: 87654321 bytes : 456789 bytes # 这个是没有扩展名的文件总大小
你可以直接使用extension_sizes这个变量,它的结构和你想要的DataX完全对应,比如extension_sizes['.mp3']就能直接拿到所有mp3文件的总字节数。
内容的提问来源于stack exchange,提问作者LuigiKraken
相关产品推荐
相关产品推荐

