如何按文件名中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
相关产品推荐
相关产品推荐

