档案软件功能不全?教你用Python搭建自动化质检补丁系统

一、环境构建与依赖配置

针对现有档案软件无法修改源码且功能缺失的问题,我们采用Python构建外部“质检+补丁”中间层。首先需要在本地或服务器配置Python 3.9及以上环境。请直接访问Python官网下载安装包:https://www.python.org/downloads/。安装时务必勾选"Add Python to PATH"

安装完成后,打开命令行工具(CMD或Terminal),执行以下命令安装本次实操所需的核心依赖库:

pip install pandas openpyxl pyyaml

  • pandas:用于高效处理档案数据表。
  • openpyxl:用于读写Excel格式的档案目录。
  • pyyaml:用于读取灵活的配置文件。

二、项目目录与配置文件建立

在D盘根目录下创建一个名为ArchivePatchSystem的文件夹。在该文件夹内创建以下目录结构:

  • config/:存放配置文件。
  • input/:存放从旧档案软件导出的原始数据。
  • output/:存放质检报告和补丁处理后的数据。
  • logs/:存放运行日志。

config文件夹下新建一个settings.yaml文件,不使用任何编辑器插件,直接复制以下完整配置内容进去。该文件定义了档案必填字段校验规则和补丁生成规则:

```yaml 档案系统外部补丁配置文件 数据源路径 source_path: "../input/archive_data.xlsx" 质检报告输出路径 report_path: "../output/quality_report.xlsx" 补丁数据输出路径 patch_output_path: "../output/patch_data.xlsx" 必填字段校验规则 (字段名: 错误提示) required_fields: 档案号: "档案唯一标识符不能为空" 题名: "文件题名不能为空" 归档年度: "年度必须填写且为4位数字" 保管期限: "保管期限必须填写(永久/长期/短期)" 自动补丁规则:自动计算缺失的“档号”规则 patch_rules: auto_generate_id: true id_pattern: "{category}-{year}-{sequence}" ```

三、核心模块:数据质量自动校验

档案软件功能不全?教你用Python搭建自动化质检补丁系统

在项目根目录下创建quality_checker.py。此脚本专门解决旧软件“数据校验不严”导致垃圾数据的问题。它将读取Excel,根据YAML配置严格检查必填项,并生成错误报告。

```python import pandas as pd import yaml import os from datetime import datetime def load_config(): """加载配置文件""" config_path = os.path.join(os.path.dirname(__file__), 'config', 'settings.yaml') with open(config_path, 'r', encoding='utf-8') as f: return yaml.safe_load(f) def check_data_quality(df, config): """执行数据质量校验逻辑""" errors = [] required = config.get('required_fields', {}) 遍历每一行数据进行检查 for index, row in df.iterrows(): row_num = index + 2 Excel行号通常从1开始,加上表头 for field, error_msg in required.items(): 检查字段是否存在或为空 if field not in df.columns or pd.isna(row[field]) or str(row[field]).strip() == '': errors.append({ '行号': row_num, '档案号(参考)': row.get('档案号', '未知'), '错误字段': field, '错误详情': error_msg, '检查时间': datetime.now().strftime('%Y-%m-%d %H:%M:%S') }) 特殊检查:归档年度必须为4位数字 if field == '归档年度' and pd.notna(row[field]): val = str(row[field]) if not val.isdigit() or len(val) != 4: errors.append({ '行号': row_num, '档案号(参考)': row.get('档案号', '未知'), '错误字段': field, '错误详情': f"年度格式错误:{val},必须为4位数字", '检查时间': datetime.now().strftime('%Y-%m-%d %H:%M:%S') }) return errors def main(): cfg = load_config() input_file = os.path.join(os.path.dirname(__file__), cfg['source_path']) output_file = os.path.join(os.path.dirname(__file__), cfg['report_path']) print(f"正在读取源文件: {input_file}") try: df = pd.read_excel(input_file) print(f"读取成功,共 {len(df)} 条数据。开始质检...") except Exception as e: print(f"读取失败: {e}") return error_list = check_data_quality(df, cfg) if error_list: error_df = pd.DataFrame(error_list) error_df.to_excel(output_file, index=False) print(f"质检完成!发现 {len(error_list)} 个问题。报告已生成: {output_file}") else: print("质检通过!未发现数据质量问题。") 创建一个空报告标记通过 pd.DataFrame(['质检通过']).to_excel(output_file, index=False, header=['结果']) if __name__ == "__main__": main() ```

四、核心模块:缺失功能自动化补丁

针对旧软件“无法自动生成档号”或“无法批量重命名”的功能缺失,我们编写patch_generator.py。此脚本读取清洗后的数据,按照配置规则生成新字段,实现功能增强。

```python import pandas as pd import yaml import os def load_config(): config_path = os.path.join(os.path.dirname(__file__), 'config', 'settings.yaml') with open(config_path, 'r', encoding='utf-8') as f: return yaml.safe_load(f) def apply_patches(df, config): """应用补丁逻辑:补充缺失功能""" rules = config.get('patch_rules', {}) 功能补丁1:自动生成档号 if rules.get('auto_generate_id'): print("正在执行补丁:自动生成档号...") pattern = rules.get('id_pattern', "{category}-{year}-{sequence}") 确保按年度排序,以便序号连续 df = df.sort_values(by=['归档年度', '档案号']) new_ids = [] counters = {} 记录每个类别的计数器 for index, row in df.iterrows(): 假设我们有“门类代码”和“归档年度”字段,如果没有则使用默认值 category = str(row.get('门类代码', 'GL')).strip() �为管理类 year = str(row.get('归档年度', '0000')).strip() key = f"{category}-{year}" counters[key] = counters.get(key, 0) + 1 生成4位流水号,不足补0 seq = str(counters[key]).zfill(4) 替换占位符 new_id = pattern.replace("{category}", category).replace("{year}", year).replace("{sequence}", seq) new_ids.append(new_id) df['新档号(补丁生成)'] = new_ids 功能补丁2:标准化保管期限(将“永久10”修正为“永久”) print("正在执行补丁:标准化保管期限...") def normalize_retention(val): if pd.isna(val): return val val_str = str(val) if '永久' in val_str: return '永久' if '长期' in val_str: return '长期' if '短期' in val_str: return '短期' return val_str df['保管期限'] = df['保管期限'].apply(normalize_retention) return df def main(): cfg = load_config() input_file = os.path.join(os.path.dirname(__file__), cfg['source_path']) output_file = os.path.join(os.path.dirname(__file__), cfg['patch_output_path']) print(f"正在读取数据以生成补丁: {input_file}") df = pd.read_excel(input_file) 执行补丁逻辑 patched_df = apply_patches(df, cfg) 保存结果 patched_df.to_excel(output_file, index=False) print(f"补丁生成完毕!增强版数据已保存至: {output_file}") if __name__ == "__main__": main() ```

五、一键执行与自动化部署

为了方便操作人员无需敲代码即可运行,我们在根目录下创建一个批处理文件。在Windows下新建run_system.bat,内容如下:

```batch @echo off chcp 65001 echo ========================================== echo 档案软件外部质检与补丁系统启动中... echo ========================================== echo [Step 1/2] 正在进行数据质量校验... python quality_checker.py echo. echo [Step 2/2] 正在生成功能补丁... python patch_generator.py echo. echo ========================================== echo 所有任务执行完毕!请查看 output 文件夹。 echo ========================================== pause ```

使用方法非常简单:

  1. 将旧档案软件导出的Excel文件重命名为archive_data.xlsx。
  2. 将该文件放入input文件夹。
  3. 双击run_system.bat。

系统将自动完成“发现质量问题”和“补充缺失功能”两大任务。无需修改旧软件一行代码,即可通过外部脚本大幅提升档案数据质量和处理效率。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统