Python读取txt文件统计商品出现频次结果异常问题排查
问题定位与修复方案
核心问题原因
- 换行符处理不全:Windows平台下txt文件的换行符为
\r\n,你的代码仅移除了\n,残留的不可见字符\r会导致同一商品被识别为两个不同的字典key(比如Spinach和Spinach\r),就出现了乱码+同商品分两次统计的情况,二者数值相加刚好是正确的总频次。 - 冗余文件关闭操作:使用
with open()上下文管理器时,Python会自动在代码块执行完成后关闭文件,手动调用close()属于多余操作,且你在wordFrequency函数的循环内就关闭了文件,首次匹配到目标商品后就会终止后续统计。 - 计数逻辑错误:
wordFrequency函数中的count + 1没有把计算结果赋值给count,计数完全不生效。 - 多余None输出:
displayWordFrequency函数没有返回值,你调用时套了print(),执行完后会额外输出一行None。
修复后的完整代码
App.py
def wordFrequency(item): count = 0 with open('items.txt', encoding='utf-8') as myfile: lines = myfile.readlines() for line in lines: # 直接用strip()移除首尾所有空白字符(包括\r、\n、空格等) if line.strip() == item: count += 1 return count # 仅用于展示结果 def displayWordFrequency(): # 增加encoding参数避免不同平台编码异常 with open('items.txt', encoding='utf-8') as myfile: lines = myfile.readlines() freq = {} for line in lines: item = line.strip() # 跳过空行避免被统计 if not item: continue if item in freq: freq[item] += 1 else: freq[item] = 1 for key, value in freq.items(): print(f"{key} - {value}") # 直接调用即可,不用套print displayWordFrequency()
验证结果
执行修复后的代码,Spinach的输出为Spinach - 5,符合预期,无乱码、无重复条目。
内容的提问来源于stack exchange,提问作者joesalaz
相关产品推荐
相关产品推荐

