如何用Python批量重命名以指定前缀开头的文件?
解决以特定前缀重命名文件的问题
问题分析
- os.rename不支持通配符:你第一个代码里直接用
Reference*.xlsx作为旧路径是错误的,os.rename只能处理单个具体的文件路径,无法解析通配符*。 - 第二个代码的两处错误:
- 路径拼接错误:
ruta_carpeta + 'Reference/*.xlsx'会生成C:/Users/myname/DownloadsReference/*.xlsx,缺少目录与文件名之间的斜杠,导致glob无法匹配到目标文件; - 同名覆盖问题:循环中所有文件都被重命名为
Lote.xlsx,同一目录下无法存在多个同名文件,后续文件会直接覆盖前面的,最终只会保留最后一个文件。
- 路径拼接错误:
正确实现代码
如果需要给每个匹配到的文件重命名为唯一名称(避免覆盖),可以添加序号区分:
import glob import os ruta_carpeta = 'C:/Users/myname/Downloads' # 使用os.path.join拼接路径,避免分隔符错误,匹配以Reference开头的xlsx文件 lista_archivos = sorted(glob.glob(os.path.join(ruta_carpeta, 'Reference*.xlsx'))) # 遍历文件,从1开始给新文件名加序号 for indice, archivo_viejo in enumerate(lista_archivos, start=1): # 构造新文件名:Lote_1.xlsx、Lote_2.xlsx... archivo_nuevo = os.path.join(ruta_carpeta, f"Lote_{indice}.xlsx") os.rename(archivo_viejo, archivo_nuevo)
如果你确认只需要保留最后一个匹配到的文件(其他会被覆盖),可以修改循环逻辑:
import glob import os ruta_carpeta = 'C:/Users/myname/Downloads' lista_archivos = sorted(glob.glob(os.path.join(ruta_carpeta, 'Reference*.xlsx'))) if lista_archivos: # 取最后一个匹配的文件重命名 archivo_viejo = lista_archivos[-1] archivo_nuevo = os.path.join(ruta_carpeta, "Lote.xlsx") os.rename(archivo_viejo, archivo_nuevo)
关键注意点
- 始终使用
os.path.join拼接路径,避免手动拼接斜杠导致的跨平台兼容问题或路径错误; - 多文件重命名时必须保证新文件名唯一,否则会触发文件覆盖;
- 执行重命名前可以先打印
lista_archivos确认匹配到的文件是否正确,避免误操作。
内容的提问来源于stack exchange,提问作者user4050774
相关产品推荐
相关产品推荐

