tnblog
首页
视频
资源
登录

python使用python-docx读取word内容

188人阅读 2025/5/27 9:42 总访问:891716 评论:0 收藏:0 手机
分类: 随笔

先安装依赖

  1. pip install python-docx

段落内容和表格内容分开读取

  1. import docx
  2. from docx.document import Document
  3. from docx.table import Table
  4. from docx.text.paragraph import Paragraph
  5. def read_word_document(file_path: str) -> None:
  6. """读取 Word 文档并输出其内容"""
  7. try:
  8. file_path = "words/222.docx"
  9. # 打开文档
  10. doc: Document = docx.Document(file_path)
  11. # 读取所有段落
  12. print("文档段落内容:")
  13. for i, paragraph in enumerate(doc.paragraphs, 1):
  14. if paragraph.text.strip(): # 跳过空段落
  15. print(f"段落 {i}: {paragraph.text}")
  16. # 读取所有表格
  17. print("\n文档表格内容:")
  18. for table_idx, table in enumerate(doc.tables, 1):
  19. print(f"\n表格 {table_idx}:")
  20. for row_idx, row in enumerate(table.rows):
  21. row_data = [cell.text for cell in row.cells]
  22. print(f"行 {row_idx + 1}: {row_data}")
  23. except FileNotFoundError:
  24. print(f"错误:找不到文件 '{file_path}'")
  25. except Exception as e:
  26. print(f"错误:读取文件时发生异常 - {e}")
  27. if __name__ == "__main__":
  28. # 请替换为实际的 Word 文档路径
  29. file_path = "example.docx"
  30. read_word_document(file_path)

一次性读取完

  1. import docx
  2. from docx.document import Document
  3. from docx.oxml.ns import qn
  4. def read_word_document(file_path: str) -> None:
  5. """读取 Word 文档并按顺序输出所有内容"""
  6. try:
  7. doc: Document = docx.Document(file_path)
  8. content = []
  9. # 遍历文档中的所有内容块(段落和表格)
  10. for element in doc.element.body:
  11. # 判断元素类型
  12. if element.tag.endswith('p'): # 段落
  13. paragraph = docx.text.paragraph.Paragraph(element, doc)
  14. if paragraph.text.strip():
  15. content.append(f"[段落] {paragraph.text}")
  16. elif element.tag.endswith('tbl'): # 表格
  17. table = docx.table.Table(element, doc)
  18. table_content = []
  19. for row in table.rows:
  20. row_data = [cell.text for cell in row.cells]
  21. table_content.append(" | ".join(row_data))
  22. content.append(f"[表格]\n" + "\n".join(table_content))
  23. # 输出所有内容
  24. print("\n".join(content))
  25. except FileNotFoundError:
  26. print(f"错误:找不到文件 '{file_path}'")
  27. except Exception as e:
  28. print(f"错误:读取文件时发生异常 - {e}")
  29. if __name__ == "__main__":
  30. # 使用相对路径指定文件位置
  31. file_path = "words/222.docx"
  32. read_word_document(file_path)

读取网络中的word内容

  1. import docx
  2. import requests
  3. from io import BytesIO
  4. def read_word_document_from_url(url: str) -> None:
  5. """从 URL 读取 Word 文档并按顺序输出所有内容"""
  6. try:
  7. # 发送 HTTP 请求获取文档内容
  8. response = requests.get(url)
  9. response.raise_for_status() # 检查请求是否成功
  10. # 将响应内容转换为二进制流
  11. doc_bytes = BytesIO(response.content)
  12. # 打开文档
  13. doc = docx.Document(doc_bytes)
  14. content = []
  15. # 遍历文档中的所有内容块(段落和表格)
  16. for element in doc.element.body:
  17. if element.tag.endswith('p'): # 段落
  18. paragraph = docx.text.paragraph.Paragraph(element, doc)
  19. if paragraph.text.strip():
  20. content.append(f"[段落] {paragraph.text}")
  21. elif element.tag.endswith('tbl'): # 表格
  22. table = docx.table.Table(element, doc)
  23. table_content = []
  24. for row in table.rows:
  25. row_data = [cell.text for cell in row.cells]
  26. table_content.append(" | ".join(row_data))
  27. content.append(f"[表格]\n" + "\n".join(table_content))
  28. # 输出所有内容
  29. print("\n".join(content))
  30. except requests.exceptions.RequestException as e:
  31. print(f"HTTP 请求错误: {e}")
  32. except Exception as e:
  33. print(f"错误: 处理文档时发生异常 - {e}")
  34. if __name__ == "__main__":
  35. # 指定网络 Word 文档的 URL
  36. url = "http://watertapcollection.cqzuxia.com/ImportTemplate/222.docx"
  37. read_word_document_from_url(url)

读取word报错: 错误:读取文件时发生异常 - module ‘docx’ has no attribute ‘table’

直接读取文件的版本

  1. import docx
  2. from docx.oxml.table import CT_Tbl
  3. from docx.oxml.text.paragraph import CT_P
  4. from docx.text.paragraph import Paragraph
  5. import argparse
  6. def read_word_document(file_path: str) -> None:
  7. """读取Word文档并按顺序输出所有内容"""
  8. try:
  9. # 打开本地文档
  10. doc = docx.Document(file_path)
  11. content = []
  12. # 遍历文档中的所有内容块(段落和表格)
  13. for element in doc.element.body:
  14. if isinstance(element, CT_P): # 段落
  15. paragraph = Paragraph(element, doc)
  16. if paragraph.text.strip():
  17. content.append(f"[段落] {paragraph.text}")
  18. elif isinstance(element, CT_Tbl): # 表格
  19. table_content = []
  20. for row in element.tr_lst:
  21. row_data = []
  22. for cell in row.tc_lst:
  23. cell_text = ""
  24. for paragraph in cell.p_lst:
  25. p = Paragraph(paragraph, doc)
  26. cell_text += p.text
  27. row_data.append(cell_text)
  28. table_content.append(" | ".join(row_data))
  29. content.append(f"[表格]\n" + "\n".join(table_content))
  30. # 输出所有内容
  31. print("\n".join(content))
  32. except FileNotFoundError:
  33. print(f"错误:找不到文件 '{file_path}'")
  34. except Exception as e:
  35. print(f"错误:处理文档时发生异常 - {e}")
  36. if __name__ == "__main__":
  37. # 设置命令行参数解析
  38. parser = argparse.ArgumentParser(description='读取Word文档内容')
  39. parser.add_argument('--file', default='words/output.docx',
  40. help='Word文档路径(默认:words/output.docx)')
  41. args = parser.parse_args()
  42. # 读取指定路径的Word文档
  43. read_word_document(args.file)

读取网络中的地址版本

  1. import docx
  2. import requests
  3. from io import BytesIO
  4. def read_word_document_from_url(url: str) -> None:
  5. """从 URL 读取 Word 文档并按顺序输出所有内容"""
  6. try:
  7. # 发送 HTTP 请求获取文档内容
  8. response = requests.get(url)
  9. response.raise_for_status() # 检查请求是否成功
  10. # 将响应内容转换为二进制流
  11. doc_bytes = BytesIO(response.content)
  12. # 打开文档
  13. doc = docx.Document(doc_bytes)
  14. content = []
  15. # 遍历文档中的所有内容块(段落和表格)
  16. for element in doc.element.body:
  17. if element.tag.endswith('p'): # 段落
  18. # 正确获取段落对象的方式
  19. paragraph = docx.text.paragraph.Paragraph(element, doc)
  20. if paragraph.text.strip():
  21. content.append(f"[段落] {paragraph.text}")
  22. elif element.tag.endswith('tbl'): # 表格
  23. # 正确获取表格对象的方式
  24. table = docx.oxml.table.CT_Tbl(element)
  25. table_content = []
  26. for row in table.tr_lst:
  27. row_data = []
  28. for cell in row.tc_lst:
  29. cell_text = "".join([
  30. p.text for p in docx.text.paragraph.Paragraph(
  31. cell.p_lst[0], doc
  32. ).runs
  33. ])
  34. row_data.append(cell_text)
  35. table_content.append(" | ".join(row_data))
  36. content.append(f"[表格]\n" + "\n".join(table_content))
  37. # 输出所有内容
  38. print("\n".join(content))
  39. except requests.exceptions.RequestException as e:
  40. print(f"HTTP 请求错误: {e}")
  41. except Exception as e:
  42. print(f"错误: 处理文档时发生异常 - {e}")
  43. if __name__ == "__main__":
  44. # 指定网络 Word 文档的 URL
  45. url = "http://watertapcollection.xj.com/ImportTemplate/222.docx"
  46. url = "http://watertapcollection.xj.com/ImportTemplate/111.doc"
  47. read_word_document_from_url(url)

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

python学习 1-安装

Ptyhon非常简单易用的面向对象的脚本语言,跨平台 入门简单python分2个版本 Python2、Python3。Python 2.7 将于 2020 年结...

python学习 2-基本语法

基础:python脚本语言,不需要编译(像C#、Java、PHP、C++需要编译成机器可识别的语言), 而直接由解释器解释,很多地方类似...

python学习 3-爬虫基本介绍 及简单实例

爬虫爬虫就是一只猪,蜘蛛。。 网络蜘蛛。互联网是一个网由各个网站组成。无数的蜘蛛就在网上到处爬,根据网址从一个网站爬...

python实例 1-日志抓取处理 补错(附日志小技巧)

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

python实例 2-12306抢票(一) 登陆

开坑年关将近,终于对12306下手了,,平安夜撸代码,攻克了12306的登陆 2018-12-24 22:16:00没错 这篇博客就写从零开始的异...

python安装pip以及使用pip安装requests等模块

pip很简单的介绍pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。如果想...

python数据集合区别

列表(list):可读写,值可以重复,有序排列,初始化语法:['tom',‘jerry’]元组(tuple):只读,值可以重复,...

python实例 2-12306抢票(二) 下单

第二篇 刷票与下单1.记住登陆上一篇写了登陆:http://www.tnblog.net/cz/article/details/162 为了方便调试 不让每次登陆都...

使用VS Code开发python

Vs Code开发Python可以很好的支持代码调试、智能提示、代码对齐等1:下载VS Codehttps://code.visualstudio.com/Downloadvs ...

python变量与命名

Python使用等号 ( = ) 作为赋值运算符,例如a = 66 就是一条赋值语句,作用就是将66赋值给变量a。Python是弱类型语言,弱类...

python关键字和内置函数

Python中包含了如下所示的关键字:上面这些关键字都不能作为变量名。另外,Python 3还提供了如下表所示的内置函数:也不能...

python基础输入和输出

Python使用print()函数向打印程序输出,采用input()函数接收程序输入。print()函数的语法格式如下:print(value,...,sep=&#...

python基本数据类型

Python包含两大类基本数据类型:数值类型、字符串类型,三大类组合数据类型:集合类型、序列类型和字典类型.数值类型:整型...

python中通过fake_useragent生成随机UserAgent

fake_useragent第三方库,来实现随机请求头的设置;GitHub ---> https://github.com/hellysmile/fake-useragent安...

python 升级pip

一条命令即可: python -m pip install --upgrade pip 安装成功后,一般是在python目录下面的Scripts里边的

python html编码解码

使用方法:html.escape(s)与html.unescape即可 import html s="<div>jsdlfjsl</div>" #html编...
这一生多幸运赶上过你.
排名
8
文章
243
粉丝
7
评论
7
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术