自动检查是否作弊

使用Python-docx获取文件元数据

Posted by Silence on June 2, 2020

背景概述

因工作需求,有大量的学生作业需要批改,为了节省重复劳动,先行过滤掉互相抄袭的作业。

Python-docx库简介

一个可以创建和编辑docx文件的库。
官方手册在:https://python-docx.readthedocs.io/en/latest/index.html#
在我实现过程中使用的是CoreProperties属性,通过该属性可以获取需要的文档名,作者,创建时间等等信息

实现

需求:获取每一个docx文件的元属性,然后存入xls文件方便比较
实现过程:
1.通过Python-docx库中提供的函数提取元属性
2.通过pandas将获取的数据存放入xls文件
踩坑点:
1.一开始想通过将docx文件解压缩提取里面的xml获取元数据,后面觉得太复杂了。仔细一看python-docx库提供了相关功能,果断换
2.

from docx import Document
import os
import re
import pandas as pd
import datetime

path = os.getcwd()  # 获取当前脚本文件所在路径
all_files = [f for f in os.listdir(path)]  # 输出根path下的所有文件名到一个列表中
excel_content = {'文档名': '',
                 '文档作者': '',
                 '文档最后保存者': '',
                 '文档创建时间': '',
                 '上次修改时间': '',
                 '编辑总时间(分钟)': '',
                 '修订号': ''
                 }
new_excel_df = pd.DataFrame(excel_content, index=[0])#初始化表格

pattern = [".*\.docx"]   #匹配所有的word文件
file = ""
for fi in all_files:
    if(re.match(pattern[0], fi) != None):
        try:
            document = Document(fi)
            document_author = document.core_properties.author  #文档作者
            document_created = document.core_properties.created
            document_last_modified_by = document.core_properties.last_modified_by  #文档最后修改作者
            document_modified = document.core_properties.modified
            document_revision = document.core_properties.revision
            document_all_time = round(float((document_modified - document_created).total_seconds()/60), 2)
            new_excel_df = new_excel_df.append(
                {'文档名': fi.split('.')[0],
                 '文档作者': document_author,
                 '文档最后保存者': document_last_modified_by,
                 '文档创建时间': document_created,
                 '上次修改时间': document_modified,
                 '编辑总时间(分钟)': document_all_time,
                 '修订号': document_revision
                 },
                ignore_index=True)
        except Exception as e:
            print(e)
            print(fi)
new_excel_df.to_excel("信息统计.xlsx", index=False)