准备工具(零门槛可直接落地)
1. 必备文件:已扫描归档的人事档案PDF(命名规则为「员工ID_姓名_档案类型.pdf」)、人事业务系统导出的最新变动Excel表;
2. 环境安装:
- Python 3.10.10(Windows 64位):直接下载地址,安装时必须勾选「Add Python to PATH」,点击「Install Now」完成;
- 依赖库:打开Windows键+R→输入「cmd」回车,执行以下命令(权限不足则右键「CMD」选「以管理员身份运行」):
pip install pandas PyPDF2 openpyxl
3. 基础模板:新建Excel,列名固定为「员工ID、姓名、身份证号、岗位、入职日期、离职日期、学历、档案归档日期」,保存为「人事档案基础模板.xlsx」,编码选UTF-8。
实操核心步骤
步骤1:提取现有档案元数据
批量扫描PDF的员工ID、姓名、归档日期,生成标准化元数据:
- 新建记事本,粘贴以下代码,保存为「档案元数据提取.py」(保存类型选「所有文件」,编码UTF-8);
- 修改代码中「pdf_dir」「output_excel」为你本地的路径(例:
r"C:\人事档案\待扫描PDF");
```python
import os
import pandas as pd
from PyPDF2 import PdfReader
配置路径(需替换为你自己的路径)
pdf_dir = r"C:\人事档案\待扫描PDF"
output_excel = r"C:\人事档案\现有档案元数据.xlsx"
data = []
遍历PDF文件夹
for filename in os.listdir(pdf_dir):
if filename.endswith(".pdf"):
拆分文件名获取员工ID、姓名
parts = filename.split("_")
if len(parts) >=2:
emp_id, emp_name = parts[0], parts[1]
读取PDF归档日期
pdf_path = os.path.join(pdf_dir, filename)
reader = PdfReader(pdf_path)
create_date = reader.metadata.get("/CreationDate", "").split("D:")[1].split("+")[0] if "/CreationDate" in reader.metadata else ""
data.append({"员工ID": emp_id, "姓名": emp_name, "档案归档日期": create_date, "现有档案路径": pdf_path})
生成元数据Excel
pd.DataFrame(data).to_excel(output_excel, index=False, sheet_name="现有档案元数据")
```
操作说明:双击「档案元数据提取.py」运行,完成后得到「现有档案元数据.xlsx」,所有字段自动填充,无需手动录入。
步骤2:对比业务数据自动标记需更新项
用最新人事变动表与元数据对比,快速定位需更新的员工档案:
- 确保「人事变动最新数据.xlsx」列名与基础模板完全一致;
- 新建记事本粘贴以下代码,保存为「档案更新对比.py」,修改3处路径;
```python
import pandas as pd
配置路径(全部替换为你本地路径)
template_path = r"C:\人事档案\人事档案基础模板.xlsx"
meta_path = r"C:\人事档案\现有档案元数据.xlsx"
update_path = r"C:\人事档案\人事变动最新数据.xlsx"
加载3份数据
template_df = pd.read_excel(template_path)
meta_df = pd.read_excel(meta_path)
update_df = pd.read_excel(update_path)
合并数据并标记需更新项
merged_df = template_df.merge(meta_df[["员工ID", "档案归档日期", "现有档案路径"]], on="员工ID", how="left")
final_df = merged_df.merge(update_df, on="员工ID", how="left", suffixes=("", "_变动"))
标记:岗位/离职日期不同且非空的项为需更新
final_df["需更新"] = final_df.apply(lambda row:
(pd.notna(row["岗位_变动"]) and row["岗位_变动"] != row["岗位"]) |
(pd.notna(row["离职日期_变动"]) and row["离职日期_变动"] != row["离职日期"]), axis=1)
保存对比结果
final_df.to_excel(r"C:\人事档案\档案更新对比结果.xlsx", index=False)
```
操作说明:运行代码后,打开对比结果Excel,「需更新」列为True的即为要处理的档案。
步骤3:更新后归档同步
- 针对「需更新」的员工:重新整理最新信息,对应更新PDF的归档日期(代码中可追加
pdf.metadata["/CreationDate"] = f"D:{pd.Timestamp.now().strftime('%Y%m%d%H%M%S')}");
- 修改PDF文件名,添加「_已更新」后缀,同步到数字化档案系统的归档目录;
- 在对比结果Excel中,将「归档状态」列标记为「已更新」,避免重复操作。
关键避坑校验(100%避免错误)
- 文件名重复校验:所有PDF文件名无重复,若有重复用Excel删除重复项后补全员工ID;
- 员工ID匹配率:对比结果中员工ID匹配率需达100%,缺失则手动核对业务系统与档案的ID对应关系;
- 路径替换:代码中所有路径必须保留「r」前缀(如
r"C:\xxx"),避免转义字符报错;
- 样本抽查:随机抽查10个需更新项,确认归档日期、岗位等信息与业务系统一致,再批量归档。