数据样例:👇有如下excel数据
需求:有如下excel,a.xls,统计出路劲下没有文件的路劲
详细实现代码:
python">import os
from openpyxl import Workbook
from datetime import datetimedef get_empty_dirs(paths):# 将所有路径按目录和文件分类dirs = set()files = set()for path in paths:path = path.strip()if os.path.splitext(path)[1]: # 有扩展名的视为文件files.add(os.path.dirname(path)) # 添加文件所在目录dirs.add(os.path.dirname(path))else:dirs.add(path) # 无扩展名的视为目录# 找出没有文件的目录empty_dirs = dirs - filesreturn sorted(empty_dirs)def save_to_excel(empty_dirs):# 创建新的工作簿wb = Workbook()ws = wb.activews.title = "空目录列表"# 添加标题行ws['A1'] = "序号"ws['B1'] = "空目录路径"# 写入数据for idx, dir_path in enumerate(empty_dirs, 1):ws[f'A{idx+1}'] = idxws[f'B{idx+1}'] = dir_path# 设置列宽ws.column_dimensions['A'].width = 10ws.column_dimensions['B'].width = 100# 生成文件名(包含时间戳)timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")filename = f'空目录统计_{timestamp}.xlsx'# 保存文件wb.save(filename)return filenamedef main():# 读取a.xlsx中的路径with open('a.xlsx', 'r', encoding='utf-8') as f:paths = f.readlines()# 获取空目录empty_dirs = get_empty_dirs(paths)# 保存到Exceloutput_file = save_to_excel(empty_dirs)# 输出结果print(f"统计完成!")print(f"共找到 {len(empty_dirs)} 个空目录")print(f"结果已保存到: {output_file}")if __name__ == '__main__':main()
最终打印输出的excel结果:
用.bat脚本删除这些空文件夹:
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion:: 查找最新的统计文件
set "latest_file="
set "latest_time=0"for %%F in (空目录统计_*.xlsx) do (set "file_time=%%~tF"if !file_time! gtr !latest_time! (set "latest_file=%%F"set "latest_time=!file_time!")
)if not defined latest_file (echo 未找到空目录统计文件!echo 请先运行Python脚本生成统计文件。pauseexit /b 1
):: 创建临时文件
set "TEMP_FILE=%TEMP%\dirs_to_delete.txt"
if exist "%TEMP_FILE%" del "%TEMP_FILE%":: 使用Python读取Excel文件并输出到临时文件
python -c "import openpyxl; wb = openpyxl.load_workbook('%latest_file%'); ws = wb.active; [print(row[1].value) for row in ws.iter_rows(min_row=2) if row[1].value]" > "%TEMP_FILE%":: 显示要删除的目录列表
echo.
echo 从文件 %latest_file% 中读取到以下空目录:
echo -------------------
type "%TEMP_FILE%"
echo -------------------
echo.:: 询问用户是否继续
set /p "confirm=是否确认删除这些目录?(Y/N): "
if /i "!confirm!"=="Y" (:: 从底层开始删除空目录for /f "delims=" %%a in ('type "%TEMP_FILE%" ^| sort /r') do (rd "%%a" 2>nulif !errorlevel!==0 (echo 已删除: %%a) else (echo 删除失败: %%a))echo.echo 删除操作完成!
) else (echo.echo 操作已取消。
):: 清理临时文件
del "%TEMP_FILE%" 2>nulpause
完美解决我的问题!!!
最后附上我的项目代码目录: