You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从文件名列表中统计并返回最常见的文件扩展名?

解决Python统计最常见文件扩展名的问题

问题分析

你之前用split('.')提取扩展名的方式不可靠,容易出现两种错误:

  • 文件名包含多个点时(比如report.v2.pdf),split('.')会分割成多个部分,若处理不当会提取错误的后缀;
  • 隐藏文件(比如.bashrc)会被误判为有扩展名,而实际上这类文件没有标准扩展名。
    另外,若你没有正确遍历每个文件并提取单个扩展名,而是直接将分割后的所有字符传入Counter,就会出现统计字符而非扩展名的问题。

正确解决方案

使用Python标准库的os.path.splitext()来提取扩展名,它能处理各种边界情况,结合collections.Counter统计频率,最后筛选出出现次数最多的扩展名。

完整代码

import os
from collections import Counter

def most_common_extensions(filenames):
    # 收集所有有效的文件扩展名
    extensions = []
    for filename in filenames:
        # splitext返回(文件名主体, 扩展名),扩展名包含开头的点
        ext = os.path.splitext(filename)[1]
        if ext:  # 跳过没有扩展名的文件
            extensions.append(ext)
    
    if not extensions:
        return []  # 没有扩展名时返回空列表
    
    # 统计扩展名出现次数
    ext_counter = Counter(extensions)
    # 获取最高出现次数
    max_count = max(ext_counter.values())
    # 筛选出所有出现次数等于最高次数的扩展名
    return [ext for ext, count in ext_counter.items() if count == max_count]

示例验证

假设输入文件名列表:

sample_files = ["main.cpp", "index.html", "utils.cpp", "about.html", "logo.jpg"]
print(most_common_extensions(sample_files))

输出结果:

[".cpp", ".html"]

完全符合你的预期。

为什么这个方案更可靠

  • os.path.splitext()会正确识别文件的扩展名:
    • 对于file.txt,返回("file", ".txt");
    • 对于archive.tar.gz,返回("archive.tar", ".gz");
    • 对于.gitignore,返回(".gitignore", ""),会被我们的代码过滤掉;
  • 通过遍历每个文件并单独提取扩展名,确保Counter统计的是完整的扩展名而非零散字符。

内容的提问来源于stack exchange,提问作者Mohnnad02

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 21:12:11