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

Python中如何对含整数与字符串的路径列表按最后下划线后整数排序?

解决路径按最后一个下划线后整数排序的问题

你的问题出在排序的key函数上——当前代码试图把目录路径直接转成整数,这显然不对,因为路径里包含大量非数字字符(比如下划线、横杠、目录分隔符),自然没法正确按最后一个下划线后的整数排序。

要实现需求,我们需要精准提取每个路径中最后一个下划线后面的整数,把它作为排序依据。下面分两种常见场景给出解决方案:

场景1:目标整数在文件名里(比如文件是tmp_1483228800-1485907200_0.csv)

如果glob匹配到的是直接带有_0、_1后缀的CSV文件,可按以下逻辑处理:

import glob
import os

act = "./*/*.csv"  # 匹配所有子目录下的CSV文件,可根据实际路径调整
files = glob.glob(act)

def get_sort_key(file_path):
    # 1. 从完整路径中提取文件名(比如从"./subdir/tmp_xxx_0.csv"得到"tmp_xxx_0.csv")
    filename = os.path.basename(file_path)
    # 2. 去掉文件扩展名,得到纯文件名主体("tmp_xxx_0")
    filename_no_ext = os.path.splitext(filename)[0]
    # 3. 从末尾开始按下划线分割1次,取最后一部分转成整数
    return int(filename_no_ext.rsplit('_', 1)[-1])

sorted_list = sorted(files, key=get_sort_key)

场景2:目标整数在目录名里(比如路径是./tmp_1483228800-1485907200_0/raw_results.csv)

如果glob匹配的是子目录下的raw_results.csv,且目标整数在父目录名的末尾,调整提取逻辑即可:

import glob
import os

act = "./*/raw_results.csv"
files = glob.glob(act)

def get_sort_key(file_path):
    # 1. 从完整路径中提取目录部分(比如从"./tmp_xxx_0/raw_results.csv"得到"./tmp_xxx_0")
    dir_path = os.path.dirname(file_path)
    # 2. 提取目录的名称(得到"tmp_xxx_0")
    dir_name = os.path.basename(dir_path)
    # 3. 从末尾开始按下划线分割1次,取最后一部分转成整数
    return int(dir_name.rsplit('_', 1)[-1])

sorted_list = sorted(files, key=get_sort_key)

关键细节说明

  • 用rsplit('_', 1)而非split('_'):只会从字符串末尾分割一次,确保我们取到的是最后一个下划线后的内容,避免文件名/目录名中前面的下划线干扰结果。
  • 先提取文件名/目录名再处理:过滤掉路径中的目录分隔符、无关字符,确保只处理我们需要的目标部分。

如果需要倒序排序,只需在sorted函数中添加reverse=True参数即可。

内容的提问来源于stack exchange,提问作者Maryam Nahid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:12:26