如何用循环(非正则表达式)统计文件扩展名出现次数?
问题分析与修正代码
你的代码存在几个关键问题:
- 第一个
return(arr)直接终止了函数,导致后面统计频率的代码完全不会执行 i.split(".")返回的是列表(比如"image1.jpg"会变成["image1", "jpg"]),你直接把这个列表当作字典的键是错误的,应该取列表的最后一个元素作为扩展名- 统计频率时使用了未定义的变量
item,同时循环变量i在这里是分割后的列表,不是扩展名 return语句后的print永远不会执行,因为return会直接结束函数
以下是修正后的代码,完全用循环实现:
def count_file_types(string_arr): freq = {} for filename in string_arr: # 分割文件名,取最后一部分作为扩展名 parts = filename.split(".") # 处理没有扩展名的情况(比如"readme"),这里默认设为空字符串,也可根据需求忽略这类文件 ext = parts[-1] if len(parts) > 1 else "" # 更新频率字典 if ext in freq: freq[ext] += 1 else: freq[ext] = 1 return freq # 测试示例 print(count_file_types(['image1.jpg', 'image2.jpg', 'preso.pptx'])) # 输出: {'jpg': 2, 'pptx': 1}
如果不需要处理无扩展名的文件,可以改成:
def count_file_types(string_arr): freq = {} for filename in string_arr: if "." in filename: # 先判断是否有扩展名 ext = filename.split(".")[-1] if ext in freq: freq[ext] += 1 else: freq[ext] = 1 return freq
内容的提问来源于stack exchange,提问作者Evanto
相关产品推荐
相关产品推荐

