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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:27:12