python读写 doc文件和docx文件

2023-05-16

背景:

Python 中可以读取 word 文件的库有 python-docx 和 pywin32。

优点缺点python-docx跨平台只能处理 .docx 格式,不能处理.doc格式pywin32仅限 windows 平台.doc 和 .docx 都能处理。

一. pywin32模块

这个库很强大,不仅仅可以读取 word,但是网上介绍用 pywin32 读取 .doc 的文章真不多,因为,真心不好用。

以下是 pywin32 读取 .doc 的代码示例,但是读取表格有问题,输出全是空,原因不明,因为不打算用所以没有深入研究。另外,如果表格中有纵向合并单元格,会报错:“无法访问此集合中单独的行,因为表格有纵向合并的单元格。”

1.将doc转为docx

python3.8中win32com 要安装pypiwin32 pip install pypiwin32

 

from win32com import client as wc

word = wc.Dispatch("Word.Application")
doc = word.Documents.Open(路径+名称.doc)
doc.SaveAs(路径+名称.docx, 12)   12为docx
doc.Close()
word.Quit()

2.读取段落

import docx
docStr = Document(docName)   打开文档
for paragraph in docStr.paragraphs:
parStr = paragraph.text
--》paragraph.style.name == 'Heading 1'  一级标题   
--》paragraph.paragraph_format.alignment == 1  居中显示
--》paragraph.style.next_paragraph_style.paragraph_format.alignment == 1  下一段居中显示
--》paragraph.style.font.color

3.读取表格

numTables = docStr.tables
for table in numTables:
#行列个数
row_count = len(table.rows)
col_count = len(table.columns)
for i in range(row_count):
    row = table.rows[i].cells
	i行j列内容:row[j].text

或者:
row_count = len(table.rows)
col_count = len(table.columns)
for i in range(row_count):
    for j in range(col_count):
        print(table.cell(i,j).text)

4.按样式读取

读取标题

for p in doc.paragraphs:
    if p.style.name=='Heading 1':
        print(p.text)
import re
for p in doc.paragraphs:
    if re.match("^Heading \d+$",p.style.name):
        print(p.text)

读取正文

for p in doc.paragraphs:
    if p.style.name=='Normal':
        print(p.text)

获取docx支持的样式

from docx.enum.style import WD_STYLE_TYPE
for i in s:
    if i.type==WD_STYLE_TYPE.PARAGRAPH:
        print(i.name)

5.获取文字格式信息

paragraph 对象 里还有更小的 run 对象,run 对象才包含了段落对象的文字信息。
paragraph.text 方法也是通过 run 对象的方法获取到文字信息的:

paragraph.text 方法源码:

def text(self):
     text = ''
        for run in self.runs:
            text += run.text
        return text

文字的字体、大小、下划线等信息都包含在 run 对象中(不清楚的看前面的博客):

获取段落的 run 对象列表
runs = par0.runs
print(runs)
获取 run 对象
run_0 = runs[0]
print(run_0.text) # 获取 run 对象文字信息
打印结果:
坚持因地制宜,差异化打造特色小镇,
文档 段落 和 run 对象示意:
获取文字格式信息:

# 获取文字格式信息
print('字体名称:',run_0.font.name)
# 字体名称: 宋体
print('字体大小:',run_0.font.size)
# 字体大小: 152400
print('是否加粗:',run_0.font.bold)
# 是否加粗: None
print('是否斜体:',run_0.font.italic)
# 是否斜体: True
print('字体颜色:',run_0.font.color.rgb)
# 字体颜色: FF0000
print('字体高亮:',run_0.font.highlight_color)
# 字体高亮: YELLOW (7)
print('下划线:',run_0.font.underline)
# 下划线: True
print('删除线:',run_0.font.strike)
# 删除线: None
print('双删除线:',run_0.font.double_strike)
# 双删除线: None
print('下标:',run_0.font.subscript)
# 下标: None
print('上标:',run_0.font.superscript)
# 上标: None
LIK2

6.设置首行缩进

from docx.shared import Inches,Pt
par2 = doc.add_paragraph('段落文本')
# 左缩进,0.5 英寸
par2.paragraph_format.left_indent = Inches(0.5)
# 右缩进,20 磅
par2.paragraph_format.right_indent = Pt(20)
# 首行缩进
par2.paragraph_format.first_line_indent = Inches(1)

查看首行缩进单位

from docx import Document
from docx.shared import Inches
from docx.oxml.ns import qn

from docx.shared import Cm, Pt
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

from docx.shared import RGBColor

myDocument = Document('2020年建交集团3月分析报告.docx')

for paragraph in myDocument.paragraphs:
	print(paragraph.paragraph_format.first_line_indent)
	print(dir(paragraph))

批量的读取doc文档】

解决方案:利用python将大批.doc文件转化为.docx文件,再读写.docx文件

问题分析:python利用python-docx (0.8.6)库可以读取.docx文件或.txt文件,且一路畅通无阻,而对.doc文件本身python是无能为力的,那有很多同学就不服气,我手动把.doc文件的后缀名改为.docx或.txt不就解决问题了吗?答案是不能的,简单修改后缀名,那么文件就被你玩坏了,别说打不开,就是打开也是天书啊(乱码)。python无法操作.doc文件是他的先天不足,但是我们不要钻牛角尖一定要在互联网上找到一种源码直接读取.doc文件,一调用就好了,但是不幸的是,你可能在网上也找不到解决方案。正当我一筹莫展之时,我将.doc文档利用手动的方式“另存为”.docx文档,就能够成功打开转化后的.docx文档,于是我就尝试利用代码方式完成这个手动的“另存为”功能,问题得以解决。

直接上python代码(首先你需要先安装pypewin32库):

# -*- coding: utf-8 -*-:
import sys
import pickle
import re
import codecs
import string
import shutil
from win32com import client as wc

def doSaveAas(): # 想批处理文件,你就用for循环呗,我一次性处理了100多个文件,代码执行不超过2分钟,可以解决问题,目标文件路径可以自由改动,大家注意SaveAs方法中的参数,好多啊,别写错了

word = wc.Dispatch('Word.Application')
doc = word.Documents.Open(u'C:\\Users\\X\\PycharmProjects\\1\\大家好.doc')  # 目标路径下的文件
doc.SaveAs(u'C:\\Users\\X\\PycharmProjects\\1\\我是一枚小小的程序员X007.docx', 12, False, "", True, "", False, False, False, False) # 转化后路径下的文件 
doc.Close()
word.Quit()

 

参考摘取原文:https://www.sohu.com/a/281740874_99987664(感谢大佬)

       https://www.cnblogs.com/zhaobowen/p/13807092.html(感谢大佬)

       https://www.jb51.net/article/139671.htm(感谢大佬)

【python】后缀为doc的文件读取 - 代码小绵羊 - 博客园

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python读写 doc文件和docx文件 的相关文章

随机推荐

  • 超五类和六类网线的区别—Vecloud

    目前 xff0c 在双绞线这个大家族里 xff0c 五类 超五类 六类 超六类这些种双绞线的应用范围最为广泛 xff0c 七类也紧随其后 xff0c 那么它们之间存在着那些区别呢 超五类和六类网线的区别 随着人们对更高带宽和更快速度网络的需
  • 广域网一般采用什么网络拓扑结构?—Vecloud

    计算机网络的拓扑结构是指网络设备的物理连接关系 网络的拓扑结构主要有总线网 环型网和星型网三种结构 xff0c 还有其他一些拓扑结构 xff0c 如 xff1a 混合拓扑结构 xff0c 分布式结构 网状拓扑结构 xff0c 树型结构 xf
  • 物理专线与虚拟专线的比较

    租用专用线路是连接两个或多个站点的专用通信渠道 它作为一个点到另一个点的专用隧道 xff0c 业务是固定的月租金 租赁线路用于互联网 数据甚至电话服务 他们通常在光缆上运行 xff0c 以提供更大的带宽和速度 物理学专线是指高速通道提供速安
  • 使用的是什么JDK和JAVA虚拟机?

    Oracle JDK之前被称为SUN JDK 2009年Oracle收购SUN公司之后命名为Oracle JDK Oracle JDK是基于OpenJDK源代码构建的 使用 java version 查看JDK的版本 OracleJDK 8
  • 云计算有哪些应用领域?

    云计算是基础设施 xff0c 基础设施是日常生活的一部分 xff0c 与人们的生活密切相关 现在云计算作为服务和生活的紧密结合 云计算应用之一 金融云 金融云是利用云计算的模型组成原理 xff0c 将金融产品 信息和服务分散到由大型分支机构
  • bash命令的使用方法

    小编给大家分享一下bash命令的使用方法 xff0c 相信大部分人都还不怎么了解 xff0c 因此分享这篇文章给大家参考一下 xff0c 希望大家阅读完这篇文章后大有收获 xff0c 下面让我们一起去了解一下吧 xff01 Bash xff
  • chmod命令详解

    chmod用于改变文件或目录的访问权限 用户用它控制文件或目录的访问权限 该命令有两种用法 一种是包含字母和操作符表达式的文字设定法 xff1b 另一种是包含数字的数字设定法 1 文字设定法 语法 xff1a chmod who 43 61
  • CDN视频存储解决方案

    一 方案背景 高清 超高清视频的蓬勃发展 xff0c 用户对高品质视频体验的渴望 xff0c 对网络的并发处理和内容平台的存储能力提出了更高的要求 作为产业链的重要一环 xff0c CDN xff08 内容分发网络 xff09 进入规范发展
  • vim中替换字符串的方法有哪些

    这篇文章为大家带来有关vim中替换字符串的方法介绍 xff0c 如果在日常学习或工作遇到这个问题 xff0c 希望大家通过这篇文章的几种方法解决替换字符串的问题 s str1 str2 g 替换每一行中所有str1为str2 常用 xff0
  • SSL连接中握手协议及握手过程

    SSL的主要目的是在两个通信应用程序之间提供私密信和可靠性 这个过程通过3个元素来完成 xff1a 1 握手协议 握手协议负责协商被用于客户机和服务器之间会话的加密参数 当一个SSL客户机和服务器第一次开始通信时 xff0c 它们在一个协议
  • SSL证书是什么?SSL运作方式?

    SSL证书创建加密连接并建立信任 在线业务最重要的组成部分之一是创建一个值得信赖的环境 xff0c 潜在客户对此充满信心 SSL证书通过建立安全连接来建立信任的基础 为了确保访问者的连接安全 xff0c 浏览器提供了特殊的视觉提示 xff0
  • 带宽叠加是什么意思?

    视频会议的清晰度 流畅性 xff0c 往往是用户最为看重的体验感 xff0c 而网络带宽速度如何 xff0c 直接影响到了视频会议的呈现效果 如何让企业级 政务级视频会议常用的局域网带宽更快 通常我们在企业网络或实际项目中 xff0c 随着
  • SQL语法整理(五)-视图

    视图 含义 xff1a 从数据库一个或多个表中导出的虚拟表 作用 xff1a 方便用户操作 要求所见即所需 xff0c 无需添加额外的查询条件 xff0c 直接查看 增加数据的安全性 xff1a 通过视图 xff0c 用户只能查看或修改指定
  • 【Dart快速入门】安装与运行程序

    Dart is a client optimized language for fast apps on any platform 下载安装 Dart SDK Dart SDK 可以用来开发 WEB 命令行程序 服务端程序等 如果是开发移动
  • MATLAB 曲线形状,粗细,颜色使用大全

    颜色的改变 可以 通过改变R G B 的值改变线条的颜色 xff1a matlab命令 xff1a plot x y Color R G B RGB颜色表如下 xff1a 二 改变曲线的粗细 xff1b 通过改变c 1 43 c 1 43
  • torch.zeros() 函数详解

    torch zeros 函数 返回一个形状为为size 类型为torch dtype xff0c 里面的每一个值都是0的tensor torch zeros size out 61 None dtype 61 None layout 61
  • Anaconda 删除虚拟环境

    删除虚拟环境 xff1a 删除环境 xff1a 使用命令conda remove n your env name 虚拟环境名称 all xff0c 即可删除 删除虚拟环境中的包 xff1a 使用命令conda remove name you
  • Python实现流星雨效果的代码

    绘制一颗流星 import numpy as np import matplotlib pyplot as plt from matplotlib collections import LineCollection x0 y0 61 1 1
  • python绘制散点图,非常全,非常详细(已验证)

    少废话 xff0c 直接上代码 import matplotlib pyplot as plt import numpy as np 1 首先是导入包 xff0c 创建数据 n 61 10 x 61 np random rand n 2 随
  • python读写 doc文件和docx文件

    背景 xff1a Python 中可以读取 word 文件的库有 python docx 和 pywin32 优点缺点python docx跨平台只能处理 docx 格式 xff0c 不能处理 doc格式pywin32仅限 windows