Advertisement

【Python批量修改文件名称】

阅读量:

一、背景

文件夹下面有多个子文件夹,子文件夹下面有多个文件,需要挨个肉眼对比检查文件内容;

文件的类型不一致,excel、图片、文本等;

文件数量,名称复杂,多人对比检查时难以记得上次查看到哪一张,很可能做重复工作。

二、批量修改文件名称

使用os模块,遍历并修改文件名称为数字。

文件夹结构如下图所示:

复制代码
 import os

    
  
    
  
    
 def name_to_num(file_dir):
    
     """
    
     修改文件名称为从1开始的数字
    
     :param file_dir: 文件所在文件夹路径
    
     :return:
    
     """
    
     num = 1
    
     file_list = os.listdir(file_dir)
    
     for f in file_list:
    
     old_path = file_dir + os.sep + f  # 原文件路径
    
     ext = os.path.splitext(f)[1]  # 文件后缀
    
     new_path = file_dir + os.sep + f"{str(num)}{ext}"  # 新文件路径
    
     os.rename(old_path, new_path)  # 重命名文件
    
     num += 1
    
  
    
  
    
 def not_empty_dir(path):
    
     """
    
     判断是否为有文件的文件夹
    
     :param path:
    
     :return:
    
     """
    
     if os.path.isdir(path) and len(os.listdir(path)) > 0:
    
     return 1
    
     elif os.path.isfile(path):
    
     return
    
     else:
    
     return
    
  
    
  
    
 if __name__ == "__main__":
    
     root_path = 'C:\ Users\ Administrator\ Desktop\ level1'
    
     l2 = os.listdir(root_path)  # level2文件夹名称
    
     for f2 in l2:
    
     l2_path = root_path + os.sep + f2  # level2文件夹路径
    
     if not_empty_dir(l2_path):
    
         name_to_num(l2_path)
    
    
    
    
    AI写代码

运行结果:

三、文件名导出到excel

将文件名导出到excel中,方便记录上次查看到的地方。

复制代码
 import os

    
 import xlwt
    
  
    
  
    
 def name_to_excel(file_dir, target_file_name):
    
     """
    
     将文件夹下所有的文件名称保存到excel
    
     :param file_dir: 文件夹路径
    
     :param target_file_name: excel名称
    
     :return:
    
     """
    
     file_name_list = os.listdir(file_dir)
    
     write_excel(file_name_list, target_file_name)
    
  
    
  
    
 def write_excel(data: list, file_name):
    
     """
    
     按行将列表数据写入excel
    
     :param data: 数据-列表
    
     :param file_name: 文件名称
    
     :return:
    
     """
    
     wb = xlwt.Workbook(encoding='utf-8')  # 新建工作簿
    
     ws = wb.add_sheet(sheetname='new_sheet', cell_overwrite_ok=1)  # 新建工作表
    
     for r in range(len(data)):  # 按行写入数据
    
     ws.write(r, 0, data[r])
    
     wb.save(file_name)  # 保存excel
    
  
    
  
    
  
    
 if __name__ == "__main__":
    
     root_path = 'C:\ Users\ Administrator\ Desktop\ level1'
    
     l2 = os.listdir(root_path)  # level2文件夹名称
    
     for f2 in l2:
    
     l2_path = root_path + os.sep + f2  # level2文件夹路径
    
     if not_empty_dir(l2_path):
    
         name_to_excel(l2_path, f"list_{f2}.xlsx")
    
    
    
    
    AI写代码

运行结果:

问题:

从运行结果可以看到,导出的文件名称顺序和我们在windows文件夹中看到的不一样。

文件名称前面我都修改成了数字,所有可以直接使用sort()重新排顺序,在name_to_excel()方法中添加一行代码:

复制代码
    file_name_list.sort(key=lambda x: int(x.split('.')[0])) 
    
    AI写代码

运行结果:

四、完整代码

复制代码
 import os

    
 import xlwt
    
  
    
  
    
 def name_to_num(file_dir):
    
     """
    
     修改文件名称为从1开始的数字
    
     :param file_dir: 文件所在文件夹路径
    
     :return:
    
     """
    
     num = 1
    
     file_list = os.listdir(file_dir)
    
     for f in file_list:
    
     old_path = file_dir + os.sep + f  # 原文件路径
    
     ext = os.path.splitext(f)[1]  # 文件后缀
    
     new_path = file_dir + os.sep + f"{str(num)}{ext}"  # 新文件路径
    
     os.rename(old_path, new_path)  # 重命名文件
    
     num += 1
    
  
    
  
    
 def name_to_excel(file_dir, target_file_name):
    
     """
    
     将文件夹下所有的文件名称保存到excel
    
     :param file_dir: 文件夹路径
    
     :param target_file_name: excel名称
    
     :return:
    
     """
    
     file_name_list = os.listdir(file_dir)
    
     file_name_list.sort(key=lambda x: int(x.split('.')[0]))  # 文件名称转换为整型排序
    
     write_excel(file_name_list, target_file_name)
    
  
    
  
    
 def write_excel(data: list, file_name):
    
     """
    
     按行将列表数据写入excel
    
     :param data: 数据-列表
    
     :param file_name: 文件名称
    
     :return:
    
     """
    
     wb = xlwt.Workbook(encoding='utf-8')  # 新建工作簿
    
     ws = wb.add_sheet(sheetname='new_sheet', cell_overwrite_ok=1)  # 新建工作表
    
     for r in range(len(data)):  # 按行写入数据
    
     ws.write(r, 0, data[r])
    
     wb.save(file_name)  # 保存excel
    
  
    
  
    
 def not_empty_dir(path):
    
     """
    
     判断是否为有文件的文件夹
    
     :param path:
    
     :return:
    
     """
    
     if os.path.isdir(path) and len(os.listdir(path)) > 0:
    
     return 1
    
     elif os.path.isfile(path):
    
     return
    
     else:
    
     return
    
  
    
  
    
 if __name__ == "__main__":
    
     root_path = 'C:\ Users\ Administrator\ Desktop\ level1'
    
     l2 = os.listdir(root_path)  # level2文件夹名称
    
     for f2 in l2:
    
     l2_path = root_path + os.sep + f2  # level2文件夹路径
    
     if not_empty_dir(l2_path):
    
         name_to_num(l2_path)
    
         name_to_excel(l2_path, f"list_{f2}.xlsx")
    
    
    
    
    AI写代码

全部评论 (0)

还没有任何评论哟~