天然气部门档案整理:从纸质到数字化的全流程实操
一、环境准备与工具安装
在开始天然气部门档案整理之前,必须搭建一个稳定、高效的自动化处理环境。本方案基于Python开发,利用OCR技术将扫描件转化为可检索的文本数据。请严格按照以下步骤操作,确保环境零报错。
1. 安装Python环境
前往Python官网下载 3.9 或 3.10 版本的Windows安装包(64位)。下载地址:https://www.python.org/downloads/windows/。安装时,务必勾选底部的 "Add Python to PATH" 选项,这直接决定了后续命令是否能在终端直接运行。安装完成后,打开CMD(命令提示符),输入 python --version,若显示版本号则说明安装成功。
2. 安装Tesseract-OCR引擎
这是识别中文档案的核心组件。不要使用系统默认的包管理器,请直接下载Windows安装包。下载地址:https://github.com/UB-Mannheim/tesseract/wiki。进入页面后,找到 tesseract-ocr-w64-setup-5.x.x.exe(5.3.0或更高版本)进行下载。
安装过程中,在"Choose Components"界面,务必展开 "Additional language data",勾选 Chinese (Simplified) 和 English,否则无法识别中文档案。安装路径建议保持默认(C:\Program Files\Tesseract-OCR),后续代码中会直接调用此路径。
3. 安装Python依赖库
在CMD中依次执行以下三条命令,安装图像处理、OCR接口及数据操作库:
pip install pytesseract pillowpip install pandas openpyxlpip install shutil(通常内置,若报错则执行)
二、项目目录结构初始化
为了实现自动化归档,需要在本地建立一个规范的文件目录。请在D盘根目录下创建一个名为 Gas_Archive_Project 的文件夹,并在其内部建立以下子目录结构:
- D:\Gas_Archive_Project\raw_scans:存放待处理的原始扫描件(支持JPG、PNG、PDF格式)。
- D:\Gas_Archive_Project\processed_files:存放处理后的重命名文件。
- D:\Gas_Archive_Project\logs:存放处理过程的日志文件。
- D:\Gas_Archive_Project\archive_system.py:我们的核心脚本文件(稍后创建)。
将所有待整理的天然气档案(如用户合同、管道铺设图纸、安检记录表)全部复制到 raw_scans 文件夹中。请确保文件名不要包含特殊字符,以免读取报错。
三、OCR识别核心模块开发

打开VS Code或任意文本编辑器,新建 archive_system.py 文件。我们将编写代码,利用Tesseract对图片进行文字提取。以下是核心代码段,请直接复制:
上述代码中,lang='chi_sim+eng' 参数至关重要,它确保了引擎能同时处理天然气档案中的中文说明和英文/数字编号。如果识别率低,建议在调用前对图片进行灰度处理,但为了保证实操的简洁性,本指南直接使用原图处理。
四、档案信息提取与清洗
天然气档案通常包含特定的关键字段,如“用户合同号”、“安检日期”、“管线编号”。我们需要编写正则表达式,从OCR提取的杂乱文本中精准抓取这些信息。继续在脚本中添加以下函数:
```python def parse_archive_info(text): """ 从识别的文本中解析关键信息 根据实际档案格式调整正则表达式 """ info = { "contract_no": "未知", "check_date": "未知", "pipeline_id": "未知", "file_type": "其他" } if not text: return info 1. 提取合同号 (假设格式为 GAS-YYYY-NNNNN) contract_match = re.search(r'(GAS-\d{4}-\d{5,})', text) if contract_match: info["contract_no"] = contract_match.group(1) 2. 提取日期 (格式 YYYY-MM-DD) date_match = re.search(r'(\d{4}-\d{2}-\d{2})', text) if date_match: info["check_date"] = date_match.group(1) 3. 提取管线编号 (假设包含字母P和数字) pipeline_match = re.search(r'(P[-_]?\d{4,})', text, re.IGNORECASE) if pipeline_match: info["pipeline_id"] = pipeline_match.group(1).upper() 4. 简单判断档案类型 if "安检" in text or "inspection" in text.lower(): info["file_type"] = "安检记录" elif "合同" in text or "contract" in text.lower(): info["file_type"] = "用户合同" elif "图纸" in text or "drawing" in text.lower(): info["file_type"] = "工程图纸" return info ```此段代码利用正则表达式清洗数据。请根据您手中实际档案的编号规则修改 contract_match 中的正则表达式。例如,如果贵单位合同号是“HT2023001”,请将正则改为 r'(HT\d{7})'。
五、自动化归档脚本整合
接下来,我们将上述模块整合,实现批量处理:读取文件 -> 识别 -> 提取信息 -> 重命名归档 -> 生成索引表。将以下主函数代码追加到脚本末尾:
```python def main(): raw_dir = r'D:\Gas_Archive_Project\raw_scans' processed_dir = r'D:\Gas_Archive_Project\processed_files' log_dir = r'D:\Gas_Archive_Project\logs' 确保输出目录存在 os.makedirs(processed_dir, exist_ok=True) os.makedirs(log_dir, exist_ok=True) 支持的图片格式 valid_extensions = ('.jpg', '.jpeg', '.png', '.bmp') files = [f for f in os.listdir(raw_dir) if f.lower().endswith(valid_extensions)] data_records = [] log_content = [] print(f"开始处理,共发现 {len(files)} 个文件。") for filename in files: file_path = os.path.join(raw_dir, filename) print(f"正在处理: {filename} ...") 1. OCR识别 text = extract_text_from_image(file_path) 2. 信息解析 info = parse_archive_info(text) 3. 构建新文件名 规则: 类型_合同号_日期.后缀 file_ext = os.path.splitext(filename)[1] new_filename = f"{info['file_type']}_{info['contract_no']}_{info['check_date']}{file_ext}" new_file_path = os.path.join(processed_dir, new_filename) 4. 移动并重命名文件 try: shutil.copy(file_path, new_file_path) status = "成功" except Exception as e: status = f"失败: {e}" 5. 记录数据 record = { "原文件名": filename, "新文件名": new_filename, "合同号": info['contract_no'], "日期": info['check_date'], "管线ID": info['pipeline_id'], "档案类型": info['file_type'], "处理状态": status } data_records.append(record) log_entry = f"{datetime.now()} | {filename} -> {new_filename} | {status}\n" log_content.append(log_entry) 6. 生成Excel索引表 df = pd.DataFrame(data_records) excel_path = os.path.join(log_dir, f"archive_index_{datetime.now().strftime('%Y%m%d%H%M%S')}.xlsx") df.to_excel(excel_path, index=False) 7. 保存日志 with open(os.path.join(log_dir, "process_log.txt"), "a", encoding="utf-8") as f: f.writelines(log_content) print(f"处理完成!索引表已生成: {excel_path}") if __name__ == "__main__": main() ```六、执行与结果验证
代码编写完毕后,保存文件。回到CMD窗口,将目录切换至项目文件夹:
cd D:\Gas_Archive_Project
执行脚本命令:
python archive_system.py
预期结果与验证步骤:
- 控制台输出:屏幕会滚动显示“正在处理: xxx.jpg”,并显示处理进度。
- 文件归档:打开
processed_files文件夹,您将看到所有文件已被重命名。例如,原来的scan001.jpg可能变成了用户合同_GAS-2023-00088_2023-10-12.jpg。 - 数据索引:打开
logs文件夹,找到最新的archive_index_xxxxx.xlsx文件。使用Excel打开,您会看到一个清晰的表格,列出了所有档案的合同号、日期、类型等信息。
此时,您可以直接在Excel中通过“筛选”功能,按“合同号”或“日期”查找所有相关档案,文件名已直接对应,实现了从纸质杂乱文档到数字化结构化数据的转变。若遇到识别错误,请检查原始图片清晰度,或调整 parse_archive_info 函数中的正则表达式以匹配实际文本特征。