Python如何对含整数与字符串的文件按数值降序排序并保留原行内容
Python按行尾数值排序文本行并保留完整内容
核心用Python内置sorted()的自定义键功能实现,不需要手动拆分数字和原行做映射,写法简洁高效。
可直接运行的完整代码
# 替换为你的日志文件实际路径 log_file = "visit_log.txt" # 1. 读取文件所有非空行 with open(log_file, "r", encoding="utf-8") as f: raw_lines = [line.rstrip("\n") for line in f if line.strip()] # 2. 按访问量从高到低排序 sorted_lines = sorted( raw_lines, # 排序依据:提取每行末尾冒号后的数字转成整数 key=lambda single_line: int(single_line.split(":")[-1].strip()), reverse=True # 设为True即为从大到小倒序排列 ) # 3. 打印结果验证,也可以写入新文件 for line in sorted_lines: print(line) # 如需写入排序后的文件,放开下面注释即可 # with open("sorted_visit_log.txt", "w", encoding="utf-8") as f: # f.write("\n".join(sorted_lines))
说明
- 你之前只输出数字的原因:排序时把提取到的访问量数字单独组成了列表,排序对象本身就是数字,自然无法返回原行内容。而使用
key参数时,sorted只会临时提取key值做大小比较,最终返回的还是列表里原本存储的完整行字符串,不会改动原始内容。
- 注意:读取文件时用
rstrip("\n")只去掉行尾的换行符,不会删掉行首尾可能存在的有效空格,比直接用strip()处理整行更安全。
- 如果行内容格式不固定,无法保证数字一定在最后一个冒号后面,可以用正则提取每行最后出现的数字当排序键,容错性更高:
import re sorted_lines = sorted( raw_lines, key=lambda single_line: int(re.findall(r"\d+", single_line)[-1]), reverse=True )
内容的提问来源于stack exchange,提问作者Wiki
相关产品推荐
相关产品推荐

