python识别word文件格式 ——(专栏:基于python编写简单office阅卷程序①)

● 研二在读学生,非工科非计算机专业,故代码简陋初级勿喷,本文仅为记录和快乐分享。○ 感谢肯定,转载请注明本页出处即可。 ____Ⓙ即刻@王昭没有君python识别word文件格式——(基于python编写简单office阅卷程序①)...
摘要由CSDN通过智能技术生成

● 研二在读学生,非工科非计算机专业,故代码简陋初级勿喷,本文仅为记录和快乐分享。
○ 感谢肯定,感谢点赞收藏分享,转载请注明本页出处即可。 ____Ⓙ即刻@王昭没有君

本文仅为笔者摸索总结-欢迎订正补充交流讨论-

❤python识别word文件格式 ——(专栏:基于python编写简单office阅卷程序①)

————————

一、整体思路:

🍒1. 使用python第三方库docx识别尽可能多的word格式;(更简单方便)

  • 使用 dir() 查看当级存在的属性或下级对象(不含双下划线__的)
  • 使用 (.属性)试图调用查看属性,或(.对象)进入下级对象

🍒2. 将.docx转为.xml格式文件,读取标签,补充识别docx库无法识别的格式;

  • 解压word.docx文件为xml文件(不止一个,有好几个文件夹)
  • 找到相应的属性在xml文件中的存储标签名和层级
  • 使用(层级.tag)(层级.attrib)(层级.text) 试图取出该属性

🍒3. office有个懒惰且简洁的规则是,很多默认属性和格式,若该文档中作者未修改默认格式或属性,则在xml文件中该属性或格式的标签不存在 ,则在用python抽取该格式或属性时,返回值为None或不存在,有时还会报错。例如:

  • 默认字体为宋体(有的版本是宋体(标题)或宋体(正文))
  • 默认字号小三(也可能因版本不同而不同或.doc和.docx差异)
  • 默认无首行缩进、默认行间距1.0倍等

而在修改了这些格式后,该属性标签会存储在.docx和.xml文件中。又不像是完全的日志文件。

————————

二、使用python库情况

此处均为编写阅卷程序用到的,若只识别word格式,并不需要以下全部:

import docx                                     # 读取word文件
import xlrd                                     # 读取excel文件,主要是获取名单和创建地址用
import openpyxl                                 # 读取/写入 excel文件,主要是记录成绩用
import os                                       # 使用文件路径等
import xml.etree.ElementTree as ET              # 读取xml文件

除此之外,在解压转为xml文件时还用到以下库:

import os										# 因笔者分开写的解压程序,解压也用到os库
import xlrd										# 因笔者分开写的解压程序,解压也用到xlrd库,主要是获取名单和创建地址用
import shutil									# 删除配置文件
import zipfile
# 解压word(.docx)、excel(.xlsx)、ppt(.pptx)文件成为.xml格式文件

————————

三、docx库识别文档结构:

  • document:

    • sections:
    • parapraphs:
      • runs:
  • sections和paragraphs是同级关系

  • 表格和图片游离于sections和paragraphs

sections和paragraphs是同级关系

例如 :
在这里插入图片描述

🍍1.读取文件:docx.Document ( ’ 文件地址 ’ )

file = docx.Document(r"F:\文件地址\word.docx")

🍍2.读取节们:文件.sections

sections = file.sections		# 节们
for section in sections: 		# 遍历节
	print(section.page_height) 	# 页高

(1)分节符是分割节与节的标志(未尝试过分页符,欢迎补充);
(2)有关页面的属性基本都在sections部分里;
(3)节属性包括但不仅限于: # 使用print(dir(section)) 、print(dir(sections))查看更多属性和下级对象

 - 页高 :section.page_height
 - 页宽 :section.page_width
 - 页面横纵 :section.orientation
 - 装订线 :section.gutter
 - 左边距 :section.left_margin
 - 右边距 :section.right_margin
 - 上边距 :section.top_margin
 - 下边距 :section.bottom_margin
 - 页眉:section.header 
 - 页脚 :section.footer

✨——其中页眉: # 使用print(dir(section.header)) 查看更多属性和下级对象

 - 页眉顶端距离 :section.header_distance
 - 页脚底端距离 :section.footer_distance
 - 页眉内容 :section.header.paragraphs[0].text
 - 页眉对齐 :section.header.paragraphs[0].alignment
 - 页眉字号:section.header.paragraphs[0].runs[0].font.size
 - 页眉字体:section.header.paragraphs[0].runs[0].font.name

✨——页脚类似,但页码只能从xml文件识别。

🍍3.读取段落们:文件.paragraphs

paragraphs = file.paragraphs		# 段落们
for i in range(len(paragraphs)):  	# 遍历段落 也可以写成上面节的遍历形式,此处须为后续保留段号i,故写成这种形式。
	paragraph = paragraphs[i]
	if paragraphs[i].text != 
  • 36
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值