如何用Python对TXT文件中的高分列表按数值降序排序?
解决TXT文件高分列表降序排序的问题
这个问题我之前做游戏分数存储时也踩过坑!核心原因是字符串排序和整数排序的逻辑完全不一样——字符串是按单个字符的ASCII码值对比的,所以"9"会排在"15"前面,因为'9'的ASCII值(57)比'1'(49)大,程序根本不会去识别后面的数字。
下面是具体的解决流程,分三个关键环节处理:
1. 读取TXT数据并转换为整数列表
假设你的TXT文件是每行存一个高分(比如scores.txt内容是:
15 9 22 7
),读取时要把每个字符串转成整数,这样才能按数值大小排序:
# 读取文件,把每行的字符串分数转成整数 with open("scores.txt", "r") as f: # 跳过空行,只处理数字行 scores = [int(line.strip()) for line in f if line.strip().isdigit()]
2. 对整数列表做降序排序
这时候就可以放心用sort(reverse=True)了,因为是整数排序,完全按数值大小来:
scores.sort(reverse=True)
3. 将排序后的整数转回字符串写入文件
排序完成后,把每个整数转回字符串,再加换行符写回文件:
with open("scores.txt", "w") as f: for score in scores: f.write(f"{score}\n")
特殊情况处理:如果分数带附加信息(比如"玩家名:分数")
如果你的TXT格式是PlayerA:15这种,得先拆分出分数部分再转换,示例代码如下:
# 读取带玩家信息的分数行 with open("scores.txt", "r") as f: score_entries = [] for line in f: line = line.strip() if not line: continue # 拆分玩家名和分数 name, score_str = line.split(":") if score_str.isdigit(): # 把分数转成整数,和原行一起存,方便排序后恢复格式 score_entries.append( (-int(score_str), line) ) # 按分数降序排序(用负号实现降序,或者用key参数) score_entries.sort() # 提取排序后的原行内容 sorted_lines = [entry[1] + "\n" for entry in score_entries] # 写入文件 with open("scores.txt", "w") as f: f.writelines(sorted_lines)
额外小提示
- 如果分数是用逗号/空格分隔在一行的(比如
15,9,22,7),读取时先按分隔符拆分再转整数:with open("scores.txt", "r") as f: content = f.read().strip() scores = [int(s) for s in content.split(",") if s.isdigit()] - 操作前建议备份原文件,避免处理失误丢失数据。
内容的提问来源于stack exchange,提问作者ChrisEzri
相关产品推荐
相关产品推荐

