一、环境构建与依赖配置
针对现有档案软件无法修改源码且功能缺失的问题,我们采用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}"
```
三、核心模块:数据质量自动校验

在项目根目录下创建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
```
使用方法非常简单:
- 将旧档案软件导出的Excel文件重命名为
archive_data.xlsx。
- 将该文件放入
input文件夹。
- 双击
run_system.bat。
系统将自动完成“发现质量问题”和“补充缺失功能”两大任务。无需修改旧软件一行代码,即可通过外部脚本大幅提升档案数据质量和处理效率。