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

如何按文件名中SITE后的整数对CSV文件进行升序排序

按文件名中SITE后的整数排序CSV文件

需求说明

需要对一批CSV文件按文件名中SITE后的整数进行排序,示例文件名如下:

4A085SHT_SITE12_TREE3_LAUB.csv
67E89SOIL_SITE9_TREE2_LAUB.csv
4BBA3DEND_SITE10TREE2_LAUB.csv

排序依据为SITE后的数字(如示例中的9、10、12),忽略其他干扰字符。

问题重现

当前遍历文件的基础代码:

for file_name in os.listdir(folder_path):

尝试以下排序代码时触发错误:

file_names = sorted(os.listdir(folder_path), key=lambda x: int(x.split('SITE')[1].split('.')[0])) # 按SITE后的首个整数排序(如果存在)

错误信息:

ValueError: invalid literal for int() with base 10: '10TREE2_LAUB'

原因是split方法无法过滤掉SITE数字后的TREE2_LAUB这类干扰内容,导致无法将混合字符串转为整数。

解决方案

使用正则表达式精准提取SITE后的整数,同时添加检查逻辑:若文件名中无SITE+数字的格式,则将其排到最后(用float('inf')实现)。最终代码如下:

import re
import os

file_names = sorted(os.listdir(folder_path), key=lambda el: int(re.search(r"SITE(\d+)", el).group(1)) if re.search(r"SITE(\d+)", el) else float('inf'))

补充:感谢@kosciej16提供的核心正则方案,在此基础上添加了文件格式检查逻辑。

内容的提问来源于stack exchange,提问作者Marco Bob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:35:01