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

Python统计文本文件音乐流派数量,代码返回0如何解决

问题原因&解决方案

核心问题点

  • 缩进错误:Python函数体内的代码必须相对于def语句缩进4个空格,你当前写的文件读取、变量初始化、循环、打印逻辑全部没有缩进,不属于函数体内容。如果仅定义函数未主动调用,整个统计逻辑根本不会执行,自然所有计数都是0。
  • 字符串匹配失败:原始数据按逗号分割后,genre字段大概率前后带有多余空格(比如原始行格式是artist, title, Rock, play length...,逗号后自带空格),此时分割得到的row[2]实际是" Rock ",和你写的"Rock"精确匹配不上,不会触发计数。
  • 逻辑顺序错误:你先判断行首是否为#,再执行rstrip()清理换行符,未清理的换行符可能导致判断异常,遇到空行还会触发索引报错。
  • 资源泄漏风险:文件打开后没有显式关闭,可能会导致文件资源占用异常。

修正后代码

def count_genres():
    # 用with语句自动管理文件关闭,避免资源泄漏
    with open("RECORD_DATA.txt", 'r', encoding='utf-8') as file:
        rock = 0
        classical = 0
        pop = 0
        jazz = 0
        spoken_word = 0

        for row in file:
            # 先清理首尾空白、跳过空行和注释行
            clean_row = row.strip()
            if not clean_row or clean_row.startswith("#"):
                continue
            # 分割后对每个字段清理多余空格
            fields = [f.strip() for f in clean_row.split(",")]
            genre = fields[2]
            # 统一转小写匹配,避免大小写不一致导致统计遗漏
            genre_lower = genre.lower()
            if genre_lower == "rock":
                rock += 1
            elif genre_lower == "classical":
                classical += 1
            elif genre_lower == "pop":
                pop += 1
            elif genre_lower == "jazz":
                jazz += 1
            elif genre_lower == "spoken word":
                spoken_word += 1
    
    print("Amount of Records in each genre ")
    print("Rock: ", rock)
    print("Classical: ", classical)
    print("Pop: ", pop)
    print("Jazz: ", jazz)
    print("Spoken Word: ", spoken_word)
    # 可返回字典供后续逻辑调用
    return {"Rock": rock, "Classical": classical, "Pop": pop, "Jazz": jazz, "Spoken Word": spoken_word}

# 主动调用函数才会执行统计逻辑
count_genres()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:15:05