GLM-OCR辅助C盘清理实战智能识别截图中的无用文件信息你是不是也经常对着C盘里密密麻麻的文件和文件夹发愁哪些是系统核心文件不能动哪些是软件缓存可以删哪些又是陈年旧日志占着茅坑不拉屎手动一个个点开看属性不仅效率低下还容易误删重要文件。今天我们就来玩点不一样的。不用安装臃肿的清理软件也不用手动翻找我们写一个Python脚本让它“看懂”你的桌面或文件夹截图然后像一位经验丰富的管家一样帮你分析出哪些文件可能是“无用文件”的嫌疑对象。这个脚本的核心就是利用GLM-OCR这个强大的图文识别模型让机器学会“阅读”屏幕上的文件信息。1. 场景与思路为什么用OCR来清理文件传统的清理工具要么是“傻瓜式”一键清理可能误伤要么需要你具备一定的文件系统知识。我们的思路更直观、更可控所见即所得所见即可分析。想象一下这个流程当你觉得某个文件夹比如Downloads或某个软件缓存目录很乱时直接截一张图。然后运行我们的脚本脚本会识别调用GLM-OCR读取图片中的文字信息。提取从识别结果中解析出文件名、扩展名、文件大小、修改日期等关键字段。分析根据我们预设的“无用文件特征规则”如包含“cache”、“temp”、“log”等关键词或日期过于久远给每个文件打上“可疑度”标签。报告生成一份清理建议报告告诉你哪些文件可以优先考虑处理。这样做的好处显而易见安全、透明、可定制。所有分析基于你实际看到的文件列表规则由你定义最终决策权也在你手里。2. 工具准备与环境搭建我们需要两个核心工具一个用于截图另一个用于OCR识别。2.1 安装必要的Python库打开你的命令行终端使用pip安装以下库pip install pillow opencv-python requestsPillow (PIL)Python图像处理库用于处理截图。opencv-python (cv2)用于读取和预处理图片有时能提升OCR识别精度。requests用于向GLM-OCR的API接口发送请求。2.2 获取GLM-OCR API访问权限GLM-OCR通常作为一个服务提供。为了完成本实战你需要有一个可访问的API端点。这里假设你已经在相关平台如智谱AI开放平台创建了应用并获得了API Key。我们将用一个变量来存储这个关键信息请注意在实际使用中绝对不要将API Key硬编码在脚本中或上传到公开仓库。更安全的做法是使用环境变量。# 这是一个示例请替换为你的真实API信息 API_KEY your_api_key_here # 请务必妥善保管建议从环境变量读取 API_URL https://open.bigmodel.cn/api/paas/v4/ocr # 示例URL请以实际平台文档为准3. 核心脚本开发分步实现智能分析让我们把整个流程拆解成几个函数一步步实现。3.1 第一步捕获屏幕区域我们首先实现一个简单的截图功能允许用户选择屏幕上的一个区域进行捕获。from PIL import ImageGrab import tkinter as tk from tkinter import simpledialog import os def capture_screen_area(): 提示用户选择屏幕区域并截图。 返回PIL Image对象和截图保存的路径。 print(请切换到你想截图的文件夹窗口准备截图...) input(按回车键开始选择截图区域...) # 这里使用一个简单的方法全屏截图后提示用户输入坐标。 # 更优雅的方式是使用mss库或更复杂的GUI但为了简洁我们用此方法。 temp_fullscreen ImageGrab.grab() temp_path temp_fullscreen.png temp_fullscreen.save(temp_path) print(f全屏预览已保存至 {temp_path}请查看并确定要识别的区域坐标。) try: x1 int(simpledialog.askstring(输入, 请输入区域左上角X坐标)) y1 int(simpledialog.askstring(输入, 请输入区域左上角Y坐标)) x2 int(simpledialog.askstring(输入, 请输入区域右下角X坐标)) y2 int(simpledialog.askstring(输入, 请输入区域右下角Y坐标)) except (TypeError, ValueError): print(坐标输入无效将使用默认区域(100,100,800,600)。) x1, y1, x2, y2 100, 100, 800, 600 # 截取指定区域 screenshot ImageGrab.grab(bbox(x1, y1, x2, y2)) output_path file_list_screenshot.png screenshot.save(output_path) print(f区域截图已保存至{output_path}) os.remove(temp_path) # 删除临时全屏图 return screenshot, output_path3.2 第二步调用GLM-OCR识别图片文字接下来我们将截图发送给GLM-OCR API进行识别。import requests import base64 from io import BytesIO def ocr_with_glm(image_path, api_key, api_url): 调用GLM-OCR API识别图片中的文字。 :param image_path: 图片文件路径 :param api_key: 你的API Key :param api_url: API端点地址 :return: OCR识别结果的JSON数据 with open(image_path, rb) as f: image_data base64.b64encode(f.read()).decode(utf-8) headers { Authorization: fBearer {api_key}, Content-Type: application/json } payload { model: glm-ocr, # 模型名称根据平台调整 image: image_data, language: zh # 主要识别中文英文文件也能识别 } try: response requests.post(api_url, headersheaders, jsonpayload, timeout30) response.raise_for_status() # 检查请求是否成功 result response.json() return result except requests.exceptions.RequestException as e: print(fOCR请求失败{e}) if hasattr(e, response) and e.response is not None: print(f响应内容{e.response.text}) return None3.3 第三步解析与清洗OCR结果OCR返回的结果通常是带有位置和置信度的文本行。我们需要将其解析成结构化的文件信息列表。这是一个关键且需要一些“启发式”规则的步骤。import re from datetime import datetime def parse_ocr_to_file_list(ocr_result): 将OCR识别结果解析成文件信息字典列表。 这是一个简化版的解析器实际效果取决于截图排版和OCR精度。 期望的截图格式类似文件管理器列表视图名称、日期、类型、大小。 file_list [] if not ocr_result or data not in ocr_result: print(OCR结果为空或格式错误。) return file_list # 假设API返回结构为 {data: [{text: 一行文字, bbox: [...]}, ...]} text_lines [item[text] for item in ocr_result.get(data, [])] for line in text_lines: # 清洗行去除多余空格合并因OCR断开的单词 clean_line re.sub(r\s, , line.strip()) # 启发式规则1匹配常见的“文件名 日期 大小”模式 # 例如chrome_installer.log 2023/10/15 15:30 1.2 MB pattern1 r^(.?)\s(\d{4}[-/]\d{1,2}[-/]\d{1,2}\s\d{1,2}:\d{2})\s([\d.]\s*[KMGTP]?B)? match1 re.match(pattern1, clean_line) if match1: filename, date_str, size_str match1.groups() file_info { name: filename, date: date_str, size: size_str if size_str else N/A, type: filename.split(.)[-1] if . in filename else Folder/Unknown } file_list.append(file_info) continue # 启发式规则2匹配可能没有日期的行如纯文件名列表 # 如果一行看起来不像句子且包含点号可能是扩展名或常见缓存/日志关键词则视为文件名 if len(clean_line) 50 and (. in clean_line or any(keyword in clean_line.lower() for keyword in [cache, temp, log, bak])): file_info { name: clean_line, date: N/A, size: N/A, type: clean_line.split(.)[-1] if . in clean_line else Unknown } file_list.append(file_info) print(f成功解析出 {len(file_list)} 个潜在文件项。) return file_list3.4 第四步定义规则智能分析“无用文件”现在我们有了一个文件列表是时候让脚本变得“智能”了。我们定义一些规则来评估每个文件的“可疑度”。def analyze_files(file_list): 根据规则分析文件列表标记潜在的无用文件。 :return: (clean_list, suspicious_list) suspicious_keywords [ cache, temp, tmp, log, bak, backup, old, download, crash, dump, trash, .dmp, .tmp ] suspicious_extensions [.log, .tmp, .cache, .bak, .old, .dmp] clean_files [] suspicious_files [] for file_info in file_list: name_lower file_info[name].lower() score 0 reasons [] # 规则1文件名包含可疑关键词 for kw in suspicious_keywords: if kw in name_lower: score 2 reasons.append(f包含关键词 {kw}) # 规则2文件扩展名可疑 for ext in suspicious_extensions: if name_lower.endswith(ext): score 3 reasons.append(f扩展名 {ext}) # 规则3尝试解析日期如果太久远如超过180天则加分 if file_info[date] ! N/A: try: # 尝试多种日期格式 for fmt in (%Y/%m/%d %H:%M, %Y-%m-%d %H:%M, %Y/%m/%d): try: file_date datetime.strptime(file_info[date], fmt) break except ValueError: continue else: raise ValueError(日期格式不匹配) days_old (datetime.now() - file_date).days if days_old 180: score 1 reasons.append(f文件较旧{days_old}天) except Exception: pass # 日期解析失败跳过此规则 # 规则4名称中包含版本号或数字序列可能是旧版本备份 if re.search(rv\d|\d{4,}, name_lower): score 1 reasons.append(可能包含版本号或序列号) file_info[suspicion_score] score file_info[reasons] reasons if score 2: # 设置一个阈值超过则视为可疑 suspicious_files.append(file_info) else: clean_files.append(file_info) # 按可疑度分数排序 suspicious_files.sort(keylambda x: x[suspicion_score], reverseTrue) return clean_files, suspicious_files3.5 第五步生成并输出清理报告最后我们将分析结果以清晰易读的方式呈现给用户。def generate_report(suspicious_files, output_pathcleaning_report.txt): 生成清理建议报告。 with open(output_path, w, encodingutf-8) as f: f.write( * 50 \n) f.write( C盘无用文件智能分析报告\n) f.write( * 50 \n\n) f.write(f分析时间{datetime.now().strftime(%Y-%m-%d %H:%M:%S)}\n) f.write(f共发现 {len(suspicious_files)} 个可疑文件。\n\n) if not suspicious_files: f.write(恭喜未发现符合规则的高可疑度文件。\n) return f.write(【建议优先检查的文件列表】\n) f.write(- * 40 \n) for idx, file_info in enumerate(suspicious_files, 1): f.write(f{idx}. 文件名{file_info[name]}\n) f.write(f 可疑度{file_info[suspicion_score]}/10\n) if file_info[reasons]: f.write(f 判断依据{, .join(file_info[reasons])}\n) if file_info[date] ! N/A: f.write(f 修改日期{file_info[date]}\n) if file_info[size] ! N/A: f.write(f 文件大小{file_info[size]}\n) f.write(f 类型{file_info[type]}\n) f.write(\n) f.write(\n【重要提醒】\n) f.write(1. 本报告基于OCR识别和规则分析生成**仅供参考**。\n) f.write(2. 删除文件前请务必确认文件用途特别是系统文件。\n) f.write(3. 建议先将要删除的文件移动到其他位置观察系统运行无异常后再彻底删除。\n) f.write(4. 可优先处理‘.tmp’、‘.log’、‘cache’类文件。\n) print(f清理报告已生成{output_path})3.6 整合主函数将以上所有步骤串联起来。def main(): print( GLM-OCR 智能C盘清理助手 \n) # 1. 截图 screenshot_img, screenshot_path capture_screen_area() # 2. OCR识别 print(\n正在调用GLM-OCR识别图片内容...) ocr_result ocr_with_glm(screenshot_path, API_KEY, API_URL) if not ocr_result: print(OCR识别失败程序退出。) return # 3. 解析结果 print(正在解析识别结果...) file_list parse_ocr_to_file_list(ocr_result) if not file_list: print(未解析出有效文件信息请确保截图包含清晰的文件列表。) return # 4. 智能分析 print(正在根据规则分析文件...) clean_files, suspicious_files analyze_files(file_list) # 5. 生成报告 generate_report(suspicious_files) print(\n分析完成) print(f总计分析 {len(file_list)} 个文件其中 {len(suspicious_files)} 个被标记为可疑。) print(请查看生成的 cleaning_report.txt 文件获取详细建议。) if __name__ __main__: main()4. 实战演示与效果评估运行上面的脚本对着你凌乱的“下载”文件夹或某个软件的目录截个图。脚本会生成一个类似下面的报告 C盘无用文件智能分析报告 分析时间2023-10-27 14:30:15 共发现 5 个可疑文件。 【建议优先检查的文件列表】 ---------------------------------------- 1. 文件名chrome_debug.log 可疑度5/10 判断依据包含关键词 log, 扩展名 .log 修改日期2023/08/15 10:22 文件大小2.1 MB 类型log 2. 文件名photoshop_temp_001.tmp 可疑度5/10 判断依据包含关键词 temp, 扩展名 .tmp 修改日期2023/10/26 09:15 文件大小154 KB 类型tmp 3. 文件名wechat_cache 可疑度2/10 判断依据包含关键词 cache 修改日期N/A 文件大小N/A 类型Unknown ...效果评估优点这种方法提供了一种新颖、可视化的文件分析入口。它不直接操作文件系统因此非常安全。规则完全可定制你可以轻松添加针对特定软件如Adobe的CacheUnity的Temp的清理规则。局限其准确性严重依赖于截图清晰度、OCR识别精度以及文件列表的规整程度。不规则排版或复杂背景可能会影响识别。它更适合快速扫描和提供“线索”而非百分百准确的清理。5. 总结与扩展思路通过这个实战项目我们巧妙地将GLM-OCR的图像理解能力应用到了一个非常具体的桌面管理场景中。它可能不是最强大的清理工具但绝对是一个充满创意且能让你对“AI赋能日常任务”有直观感受的案例。实际用下来这个脚本在识别规整的文件列表视图时效果最好。你可以根据自己的需求轻松扩展它增强解析器针对Windows资源管理器、macOS Finder或各类软件内置文件列表的特定排版编写更精准的解析规则。集成文件操作在报告基础上可以增加一个“预览”或“一键移动至回收站谨慎”的功能但务必做好确认和备份。规则学习记录用户对分析结果的反馈“保留”或“删除”让规则模型逐渐适应用户的个人习惯。批量处理改为遍历指定目录下的真实文件直接获取准确属性再应用分析规则这就变成了一个本地智能扫描工具。这个项目的核心价值在于提供了一种思路AI模型可以成为我们与复杂信息环境之间的“翻译官”和“过滤器”。下次当你面对一堆杂乱信息不知如何下手时不妨想想能不能先让它“被看见”再让它“被理解”。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。