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

如何在列表元素的指定分隔符后使用zfill补零以实现排序

问题描述

现有如下文件名列表示例:

ls =
['DATA2022_10.csv',
 'DATA2022_2.csv',
 'DATA2022_3.csv',
 'DATA2022_4.csv',
 'DATA2022_5.csv',
 'DATA2022_6.csv',
 'DATA2022_7.csv',
 'DATA2022_8.csv',
 'DATA2022_9.csv']

希望给列表元素下划线后的数字补零,实现正确排序,期望输出:

ls =
['DATA2022_02.csv',
 'DATA2022_03.csv',
 'DATA2022_04.csv',
 'DATA2022_05.csv',
 'DATA2022_06.csv',
 'DATA2022_07.csv',
 'DATA2022_08.csv',
 'DATA2022_09.csv',
 'DATA2022_10.csv']

但zfill()只能在字符串首尾补零,想问怎么只针对下划线后的数字部分补零?

解决方案

方法1:分割字符串后拼接

把文件名拆成前缀、数字、后缀三部分,给数字补零后重新拼回去:

ls = ['DATA2022_10.csv', 'DATA2022_2.csv', 'DATA2022_3.csv', 'DATA2022_4.csv', 'DATA2022_5.csv', 'DATA2022_6.csv', 'DATA2022_7.csv', 'DATA2022_8.csv', 'DATA2022_9.csv']

processed_files = []
for name in ls:
    # 下划线分割出前缀和带后缀的数字部分
    prefix, num_with_suffix = name.split('_')
    # 再用点分割出数字和后缀
    num, suffix = num_with_suffix.split('.')
    # 给数字补零到2位
    padded_num = num.zfill(2)
    # 重新组合成新文件名
    processed_files.append(f"{prefix}_{padded_num}.{suffix}")

# 排序后得到结果
processed_files.sort()
print(processed_files)

方法2:正则表达式替换

用正则匹配下划线后、.csv前的数字,直接替换成补零后的内容:

import re

ls = ['DATA2022_10.csv', 'DATA2022_2.csv', 'DATA2022_3.csv', 'DATA2022_4.csv', 'DATA2022_5.csv', 'DATA2022_6.csv', 'DATA2022_7.csv', 'DATA2022_8.csv', 'DATA2022_9.csv']

# 匹配规则:下划线+数字+.csv,把数字部分补零后替换
processed_files = [re.sub(r'_(\d+)\.csv', lambda match: f"_{match.group(1).zfill(2)}.csv", name) for name in ls]

processed_files.sort()
print(processed_files)

方法3:直接按数字排序(不用改文件名)

如果只是要实现正确排序,其实可以不用修改文件名,排序时提取数字作为排序依据就行:

ls = ['DATA2022_10.csv', 'DATA2022_2.csv', 'DATA2022_3.csv', 'DATA2022_4.csv', 'DATA2022_5.csv', 'DATA2022_6.csv', 'DATA2022_7.csv', 'DATA2022_8.csv', 'DATA2022_9.csv']

# 提取下划线后的数字转为整数,作为排序的key
sorted_files = sorted(ls, key=lambda x: int(x.split('_')[1].split('.')[0]))
print(sorted_files)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:45:34