网站首页/ 信息中心/ 档案百科/

省钱档案整理:自建Python自动化归档系统实操

发布时间:2026年09月04日 01:25:27 浏览量:0

一、开发环境搭建与依赖安装

本系统基于Python环境开发,无需购买昂贵的商业软件。首先需要配置Python运行环境及OCR识别引擎。请严格按照以下步骤执行,避免环境配置错误导致程序无法运行。

1. 安装Python环境

访问Python官网下载Windows安装包。下载地址:https://www.python.org/downloads/release/python-31011/。下载时务必勾选"Add Python to PATH"选项,这会将Python自动添加到系统环境变量中。安装完成后,在命令行输入python --version,若显示版本号则安装成功。

2. 安装Tesseract-OCR引擎

Tesseract是开源的OCR识别引擎,用于从图片中提取文字。下载Windows安装包,地址:https://github.com/UB-Mannheim/tesseract/wiki。请下载tesseract-ocr-w64-setup-5.3.0.20221207.exe版本。安装过程中,在"Choose Components"界面务必勾选"Additional language data(download)",并展开列表勾选Chinese (Simplified)English语言包,否则无法识别中文档案。安装路径建议保持默认C:\Program Files\Tesseract-OCR,后续代码中会调用此路径。

3. 安装Python依赖库

打开命令行(CMD或PowerShell),依次执行以下三条命令安装所需库。如果下载速度慢,请使用国内镜像源。

```bash pip install pytesseract pip install Pillow pip install openpyxl ```

二、项目目录结构规划

在本地D盘根目录下创建一个名为AutoArchive的文件夹作为项目根目录。为了实现自动化的“输入-处理-输出”流程,需在该文件夹下建立以下标准目录结构:

请手动创建上述三个文件夹。这种物理隔离的方式能防止源文件被覆盖,确保数据安全。

三、核心功能代码实现

本系统核心逻辑包含三个模块:OCR文字提取、智能重命名、Excel日志记录。以下是分步实现的详细代码逻辑,所有代码均整合在同一个脚本中。

1. 导入库与配置路径

省钱档案整理:自建Python自动化归档系统实操

代码首先引入必要的库,并硬编码Tesseract的安装路径。这是最容易报错的环节,请确保路径与实际安装位置一致。

```python import os import shutil import datetime import pytesseract from PIL import Image import openpyxl from openpyxl.styles import Font 指定tesseract.exe的绝对路径,请根据实际安装情况修改 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' 定义工作目录 BASE_DIR = r'D:\AutoArchive' INPUT_DIR = os.path.join(BASE_DIR, 'input') OUTPUT_DIR = os.path.join(BASE_DIR, 'output') LOG_DIR = os.path.join(BASE_DIR, 'log') ```

2. OCR文字提取函数

该函数接收图片路径,返回识别出的文本。配置lang='chi_sim+eng'表示同时识别中文简体和英文。image_to_string方法会将图片像素转换为文本字符串。

```python def extract_text_from_image(image_path): try: 打开图片文件 img = Image.open(image_path) 使用OCR识别,指定中英文混合语言包 text = pytesseract.image_to_string(img, lang='chi_sim+eng') return text.strip() except Exception as e: print(f"识别文件 {image_path} 失败: {e}") return None ```

3. 文件整理与移动逻辑

这是主处理函数。它会遍历Input文件夹,提取图片中的前10个字符作为文件名,结合当前日期生成新文件名,并将文件移动到Output目录下以日期命名的子文件夹中。

```python def process_files(): 检查输入目录是否有文件 files = [f for f in os.listdir(INPUT_DIR) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp'))] if not files: print("Input文件夹为空或没有支持的图片文件。") return 获取当前日期用于创建分类文件夹 today_str = datetime.datetime.now().strftime('%Y-%m-%d') target_folder = os.path.join(OUTPUT_DIR, today_str) if not os.path.exists(target_folder): os.makedirs(target_folder) 准备Excel日志数据 log_data = [["原文件名", "新文件名", "识别内容摘要", "处理时间", "状态"]] for filename in files: source_path = os.path.join(INPUT_DIR, filename) print(f"正在处理: {filename} ...") 提取文字 content = extract_text_from_image(source_path) 生成新文件名:取识别内容的前10位+时间戳,防止重名 if content: valid_name = "".join([c for c in content[:10] if c.isalnum()]) else: valid_name = "UNIDENTIFIED" timestamp = datetime.datetime.now().strftime('%H%M%S') ext = os.path.splitext(filename)[1] new_filename = f"{valid_name}_{timestamp}{ext}" target_path = os.path.join(target_folder, new_filename) 移动文件 try: shutil.move(source_path, target_path) status = "成功" print(f"已移动并重命名为: {new_filename}") except Exception as e: status = f"失败: {e}" print(status) 记录日志 log_data.append([ filename, new_filename, content[:20] + "..." if content else "无内容", datetime.datetime.now().strftime('%H:%M:%S'), status ]) return log_data, today_str ```

四、Excel自动记录功能开发

为了方便人工复核,系统会自动生成Excel报表。使用openpyxl库创建工作簿,设置表头加粗样式,并将处理结果写入文件。

```python def save_log_to_excel(log_data, date_folder): if not log_data: return file_name = f"archive_log_{date_folder}.xlsx" file_path = os.path.join(LOG_DIR, file_name) 创建工作簿 wb = openpyxl.Workbook() ws = wb.active ws.title = "整理记录" 写入数据 for row in log_data: ws.append(row) 设置表头样式:加粗 for cell in ws[1]: cell.font = Font(bold=True) 保存文件 wb.save(file_path) print(f"日志已保存至: {file_path}") ```

五、完整可执行脚本整合

将上述所有代码块整合,并添加main入口。请将以下代码完整复制,保存为archive_bot.py,并存放在D:\AutoArchive目录下。

```python import os import shutil import datetime import pytesseract from PIL import Image import openpyxl from openpyxl.styles import Font 配置区域 如果Tesseract不在默认路径,请修改此处 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' BASE_DIR = r'D:\AutoArchive' INPUT_DIR = os.path.join(BASE_DIR, 'input') OUTPUT_DIR = os.path.join(BASE_DIR, 'output') LOG_DIR = os.path.join(BASE_DIR, 'log') - def extract_text_from_image(image_path): try: img = Image.open(image_path) psm 6 假设图像为统一的文本块 config = r'--psm 6' text = pytesseract.image_to_string(img, lang='chi_sim+eng', config=config) return text.strip() except Exception as e: print(f"识别错误: {e}") return None def save_log_to_excel(log_data, date_folder): if not log_data: return file_name = f"archive_log_{date_folder}.xlsx" file_path = os.path.join(LOG_DIR, file_name) wb = openpyxl.Workbook() ws = wb.active ws.title = "整理记录" for row in log_data: ws.append(row) for cell in ws[1]: cell.font = Font(bold=True) wb.save(file_path) print(f"日志已生成: {file_path}") def main(): print("=== 档案自动整理系统启动 ===") if not os.path.exists(INPUT_DIR): print(f"错误:找不到输入目录 {INPUT_DIR},请检查目录结构。") return files = [f for f in os.listdir(INPUT_DIR) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp'))] if not files: print("Input文件夹中没有待处理的图片文件。") return today_str = datetime.datetime.now().strftime('%Y-%m-%d') target_folder = os.path.join(OUTPUT_DIR, today_str) if not os.path.exists(target_folder): os.makedirs(target_folder) log_data = [["原文件名", "新文件名", "识别摘要", "处理时间", "状态"]] for filename in files: source_path = os.path.join(INPUT_DIR, filename) print(f"-> 正在处理: {filename}") content = extract_text_from_image(source_path) 清理文件名中的非法字符 if content: raw_name = content[:10].replace('\n', '').replace('\r', '').replace('/', '').replace('\\', '') valid_name = "".join([c for c in raw_name if c.isalnum()]) else: valid_name = "UNIDENTIFIED" if not valid_name: valid_name = "NO_NAME" timestamp = datetime.datetime.now().strftime('%H%M%S') ext = os.path.splitext(filename)[1] new_filename = f"{valid_name}_{timestamp}{ext}" target_path = os.path.join(target_folder, new_filename) try: shutil.move(source_path, target_path) status = "成功" print(f" [OK] 归档为: {new_filename}") except Exception as e: status = str(e) print(f" [ERR] 移动失败: {status}") log_data.append([ filename, new_filename, (content[:15].replace('\n', '') + "...") if content else "无", datetime.datetime.now().strftime('%H:%M:%S'), status ]) save_log_to_excel(log_data, today_str) print("=== 所有任务处理完毕 ===") if __name__ == "__main__": main() ```

六、系统运行与效果验证

代码部署完成后,按照以下步骤进行实操验证:

  1. 准备素材:找几张包含文字信息的图片(如合同扫描件、发票照片),文件名随意(例如:IMG_001.jpg, 123.png)。将这些文件全部复制到D:\AutoArchive\input文件夹中。
  2. 执行脚本:打开命令行,切换到项目目录cd D:\AutoArchive,输入命令python archive_bot.py并回车。
  3. 查看结果:
    • Input文件夹应为空(文件已被移走)。
    • Output文件夹下会出现一个以当前日期命名的文件夹(如2023-10-27),里面是重命名后的文件。
    • Log文件夹下会生成Excel文件,打开可看到每张图片的原始名称、新名称及识别出的文字摘要。

如果遇到TesseractNotFoundError,请再次检查代码中tesseract_cmd的路径是否正确指向了.exe文件。如果识别出的中文是乱码,请确认安装时是否下载了chi_sim语言数据包。通过这套系统,无需人工逐一命名即可完成大量档案的初步归类,大幅降低人工整理成本。

商标档案管理系统:别再让商标资产“睡大觉”了!
商标档案管理系统:别再让商标资产“睡大觉”了!
你有没有发现,很多公司花大价钱注册了一堆商标,结果呢?这些商标就像被扔进了仓库角落的旧文件,没人记得、没人维护,甚至快过期了都无人知晓。这事儿吧,说白了就是管理上的一笔“糊涂账”。
2026年09月04日 01:25:27
土木工程建筑业企业档案培训:实用干货全揭秘
土木工程建筑业企业档案培训:实用干货全揭秘
哎,各位土木届的搬砖人、包工头、资料员们,终于挖到个能救咱们半条命的宝贝了——今天要唠的就是跟咱们每天离不开的“工地隐形生命线”有关的【土木工程建筑业企业档案培训】!我可不是啥自媒体瞎忽悠,我是真踩过...
2026年09月04日 01:25:27
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818