如何用Python为字符串中的整数子串补前导零?
Python实现为文件名中的整数补前导零
针对你给出的文件名列表,以下是两种实用的补前导零方案:
方案一:固定位数补零
如果希望统一将数字补到固定位数(比如2位),可以用正则表达式配合zfill()方法快速处理:
import re def pad_fixed_length(filename, pad_len=2): # 匹配文件名中的所有整数子串,替换为补零后的格式 return re.sub(r'(\d+)', lambda match: match.group(1).zfill(pad_len), filename) # 处理单个文件示例 print(pad_fixed_length("image-9.png")) # 输出: image-09.png print(pad_fixed_length("image-10.png")) # 输出: image-10.png # 批量处理glob获取的文件列表 file_list = [ "image-0.png", "image-1.png", "image-2.png", "image-3.png", "image-4.png", "image-5.png", "image-6.png", "image-7.png", "image-8.png", "image-9.png", "image-10.png", "image-11.png" ] padded_list = [pad_fixed_length(f) for f in file_list] for f in padded_list: print(f)
方案二:根据最大数字动态补位
如果想根据文件列表中最大数字的位数自动补零(比如列表最大数字是11,就补到2位;如果有image-100.png则补到3位),可以先提取所有数字计算最大位数,再批量处理:
import re import glob # 获取目标文件列表 file_list = glob.glob("image-*.png") # 提取所有文件名中的数字,计算最大位数 all_numbers = [] for fname in file_list: num_match = re.search(r'(\d+)', fname) if num_match: all_numbers.append(int(num_match.group(1))) max_digit_count = len(str(max(all_numbers))) if all_numbers else 2 # 批量补零 padded_files = [ re.sub(r'(\d+)', lambda m: m.group(1).zfill(max_digit_count), fname) for fname in file_list ] # 输出结果 for f in padded_files: print(f)
非Python场景补零思路
在Shell等非Python环境中,可通过正则替换工具实现,比如用sed命令补两位零:
sed -E 's/([0-9]+)/printf "%02d" \1/e' filename.txt
内容的提问来源于stack exchange,提问作者jtlz2
相关产品推荐
相关产品推荐

