【Python】将文件名中的数字批量格式化为固定的位数

假如我有一些文件名中包含数字的文件,如果我在创建文件时直接命名为数字1, 2, 3 … 10, 11, 12 … 100, 101, 102 …

这样的命名方式在使用Python的内建函数sorted时会把文件的顺序读取为1, 10, 11, 12 … 100, 101, 102 … (先把1开头的数字读完,但这很明显不符合我们的预期)

此时需要把文件名修改为固定位数,如文件名中的1修改为00001, 文件名中的10修改为00010等等

假如一整个文件夹中都是这样的文件,那么如何批量修改呢?

import os     

# 设置文件夹路径      
folder_path = "/test_data"      

# 获取文件夹中的所有文件      
file_list = os.listdir(folder_path)      
# 如初始文件名为:xy_f16_1.npy 

# 记录修改的文件数量      
modified_count = 0      

# 遍历文件列表      
for filename in file_list:      
    if filename.endswith(".npy"):  # 确保只处理.npy文件      
        parts = filename.split('_')  # 拆分文件名       
        if len(parts) > 1:       
            original_number = parts[-1].split('.')[0]  # 获取原始数字部分
            if original_number.isdigit() and len(original_number) != 5:  # 检查是否需要重命名
                new_number = original_number.zfill(5)  # 将数字部分填充成五位数 
                new_filename = "_ ".join(parts[:-1]) + "_" + new_number + ".npy"
                old_path = os.path.join(folder_path, filename)  
                new_path = os.path.join(folder_path, new_filename) 
                os.rename(old_path, new_path)  # 重命名文件,修改后文件名为xy_f16_00001.npy
                modified_count += 1 

print(f"总共修改了 {modified_count} 个文件" ) 

当然,如果在创建文件时就按照这种格式来命名就更好了。 形如:

output_file = f'xy_f16_{str(index).zfill(5)}.npz'
np.savez(output_file, y=y)  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值