如何优化代码实现单个XML文件中genre标签出现次数的独立统计
修复XML文件genre标签计数错误的问题
你的问题出在计数变量没有按文件重置上!原来的count变量定义在整个文件遍历循环的外面,处理完一个文件后,count会保留之前的累加值,导致后面所有文件的计数都是基于前面的总数来判断,自然全部触发"genre count is > 1"的提示。
问题代码的核心问题
def check_genre(): genrelist = [] count = 0 # 这里定义的count会在所有文件间累加 try: for base, dirs, file in os.walk(mypath): ... for file in file: ... for genre_tag in root.iter('genre'): count +=1 # 每个文件的genre都会加到同一个count里 if count > 1: print ("genre count is > 1", file)
修正后的代码
把count的定义移到单个文件的处理逻辑内部,同时修正一处文件后缀判断的笔误(原代码里的file.endswith(".".lower())应该是想判断XML文件):
#!/usr/bin/python3 import os import xml.etree.ElementTree as ET mypath = "somepath" def check_genre(): try: for base, dirs, files in os.walk(mypath): # 跳过隐藏目录 dirs[:] = [d for d in dirs if not d[0] == '.'] for file in files: file_path = os.path.join(base, file) # 只处理XML文件 if file_path.lower().endswith('.xml'): count = 0 # 每个文件单独初始化计数 tree = ET.parse(file_path) root = tree.getroot() # 遍历当前文件的所有genre标签 for genre_tag in root.iter('genre'): count += 1 # 遍历完成后判断计数 if count > 1: print(f"genre count is > 1: {file_path}") except Exception as e: print(f"处理文件时出错: {e}") check_genre()
关键修改说明
- 将
count移到文件循环内:每次处理新的XML文件时,count都会从0开始重新统计当前文件的genre标签数量,不会再跨文件累加。 - 修正文件后缀判断:原代码的
file.endswith(".".lower())是无效判断,改成file_path.lower().endswith('.xml')才能正确筛选XML文件。 - 调整判断时机:等当前文件的所有genre标签都遍历完成后再判断计数,而不是遍历过程中就判断,这样逻辑更清晰,也避免提前触发打印。
内容的提问来源于stack exchange,提问作者bob_the_bob
相关产品推荐
相关产品推荐

