假如我有一些文件名中包含数字的文件,如果我在创建文件时直接命名为数字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)