当前位置: 首页 > news >正文

使用Python解析pdf、docx等格式文件。

针对不同类型的文件,需要采取特定的访问与解析策略来有效获取其中蕴含的知识。下面我们将介绍对于不同数据源数据的获取方式。

1 解析Docx文档

1.1 获取Docx文档中文本

from docx import Document
# pip install python-docx
# python-docx == 0.8.11
filename = 'xxx.docx'
doc = Document(filename)
for para in doc.paragraphs:print(para.text)

1.2 获取Docx文档中表格

from docx import Document
filename = r'sample.docx'
doc = Document(filename)
print(f"\n 便利文档中表格:")
print(f"\n 方法一:")
for table in doc.tables:row_count = len(table.rows)col_count = len(table.columns)for i in range(row_count):row = table.rows[i].cellsprint(f"row : {row}")
print(f"\n 方法二:")
for table in doc.tables: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)

2 解析txt文件

2.1 读取富文本txt

  • read() —— 读取所有文本
with open('sample.txt','r+',encoding='utf-8') as f:data = f.read()print(data)
  • readline() —— 读取第一行的内容
with open('sample.txt','r+',encoding='utf-8') as f:data = f.readline()print(data)
  • readlines() —— 读取全部内容,以数列的形式返回结果
with open('sample.txt','r+',encoding='utf-8') as f:data = f.readlines()print(data)
with open('sample.txt','r+',encoding='utf-8') as f:for ann in f.readlines()ann = ann.strip('\n') # 去除文本中的换行符print(ann)
# 简单版本
for i in open(file='sample.txt',encoding='utf-8').readlines():ann = i.strip('\n')print(ann)

3 解析PDF

3.1 PDF解析神器——pdfplumber

3.1.1 安装
pip install pdfplumber
3.1.2 提取pdf中的纯文本
import pdfplumber
file_name = r'sample.pdf' # 需要解析的pdf文件
output_file = 'sample.txt' # pdf解析后的内容
with pdfplumber.open(file_name) as p:page_count = len(p.pages)for i in range(0,page_count):page = p.pages[i]text_data = page.extract_text()data = open(output_file,'a',encoding='utf-8')data.write(text_data)
3.1.3 提取pdf中的表格
import pdfplumber
from openpyxl import Workbook # 保存表格
file_name = r'sample.pdf'
output_file = 'sample.xlsx'
with pdfplumber.open(file_name) as pdf:page = pdf.pages[0]table = page.extract_table()workbook = Workbook()sheet = workbook.activefor row in table:sheet.append(row)workbook.save(filename=output_file)
  • extract_tables()方法——输出文档所有表格,返回一个嵌套列表。
#extract_tables()法
with pdfplumber.open(r'exm.pdf') as pdf:  # 打开pdfpage_one = pdf.pages[0]  page_one_table =page_one.extract_tables()  # 获取pdf第一页的所有表格数据for row in page_one_table:print('第一页的表格数据:', row)
  • extact_table()方法——不会返回文档的所有表格,仅返回行数最多的表格数据。如存在多个行数相等的表格,则默认输出顶部表格数据。表格的每一行都为一个单独的列表,列表中的元素即为原表格的各个单元格的数据。
# extract_table()法
with pdfplumber.open(r'exm.pdf') as pdf_info:  # 打开pdfpage_one = pdf_info.pages[0]  page_one_table = page_one.extract_table()for row in page_one_table:print(row)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Google安装JSON-handle扩展
  • 以数字孪生技术推动网络资源管理升级
  • 力扣题解(按身高排序)
  • 文件上传漏洞(一,漏洞简介及简单利用)
  • Go语言使用内置库实现邮件发送
  • 使用Cisco进行模拟配置OSPF路由协议
  • Vue 项目中导入文件时如何默认找寻该文件夹下的 index.vue 文件
  • stm32—GPIO
  • 基于Martin实现MapboxGL自定义底图
  • 【旗芯微FC7300】如何配置PWM触发AD采样
  • 【iOS】AutoreleasePool自动释放池的实现原理
  • AWS云服务器选择最佳区域
  • 使用Linux实现FTP云盘项目2
  • 全栈物联网云平台搭建:MQTT、Node.js、MongoDB、InfluxDB与React的应用示例
  • 数据分析与应用:微信-情人节红包流向探索分析
  • php的引用
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • Fundebug计费标准解释:事件数是如何定义的?
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • iOS 颜色设置看我就够了
  • Javascript 原型链
  • JavaScript实现分页效果
  • k8s如何管理Pod
  • mysql外键的使用
  • Shadow DOM 内部构造及如何构建独立组件
  • tab.js分享及浏览器兼容性问题汇总
  • vagrant 添加本地 box 安装 laravel homestead
  • Vue学习第二天
  • 多线程 start 和 run 方法到底有什么区别?
  • 七牛云假注销小指南
  • 让你的分享飞起来——极光推出社会化分享组件
  • 使用docker-compose进行多节点部署
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • Prometheus VS InfluxDB
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​ssh免密码登录设置及问题总结
  • ​虚拟化系列介绍(十)
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #stm32整理(一)flash读写
  • (1)Nginx简介和安装教程
  • (13)DroneCAN 适配器节点(一)
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (Matlab)使用竞争神经网络实现数据聚类
  • (分布式缓存)Redis分片集群
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (算法)N皇后问题
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (一)VirtualBox安装增强功能
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)关于pipe()的详细解析
  • .NET Core WebAPI中封装Swagger配置
  • .NET Core 版本不支持的问题
  • .Net Redis的秒杀Dome和异步执行
  • .NET 快速重构概要1