一、背景
文件夹下面有多个子文件夹,子文件夹下面有多个文件,需要挨个肉眼对比检查文件内容;
文件的类型不一致,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)
运行结果:
三、文件名导出到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")
运行结果:
问题:
从运行结果可以看到,导出的文件名称顺序和我们在windows文件夹中看到的不一样。
文件名称前面我都修改成了数字,所有可以直接使用sort()重新排顺序,在name_to_excel()方法中添加一行代码:
file_name_list.sort(key=lambda x: int(x.split('.')[0]))
运行结果:
四、完整代码
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")