数据样例:👇有如下excel数据
需求:有如下excel,a.xls,统计出路劲下没有文件的路劲
详细实现代码:
import os
from openpyxl import Workbook
from datetime import datetime
def 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 - files
return sorted(empty_dirs)
def save_to_excel(empty_dirs):
# 创建新的工作簿
wb = Workbook()
ws = wb.active
ws.title = "空目录列表"
# 添加标题行
ws['A1'] = "序号"
ws['B1'] = "空目录路径"
# 写入数据
for idx, dir_path in enumerate(empty_dirs, 1):
ws[f'A{idx+1}'] = idx
ws[f'B{idx+1}'] = dir_path
# 设置列宽
ws.column_dimensions['A'].width = 10
ws.column_dimensions['B'].width = 100
# 生成文件名(包含时间戳)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f'空目录统计_{timestamp}.xlsx'
# 保存文件
wb.save(filename)
return filename
def main():
# 读取a.xlsx中的路径
with open('a.xlsx', 'r', encoding='utf-8') as f:
paths = f.readlines()
# 获取空目录
empty_dirs = get_empty_dirs(paths)
# 保存到Excel
output_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脚本生成统计文件。
pause
exit /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>nul
if !errorlevel!==0 (
echo 已删除: %%a
) else (
echo 删除失败: %%a
)
)
echo.
echo 删除操作完成!
) else (
echo.
echo 操作已取消。
)
:: 清理临时文件
del "%TEMP_FILE%" 2>nul
pause
完美解决我的问题!!!
最后附上我的项目代码目录: