字符串在Python内部的表示是Unicode编码,首先我们来认识Python中encode()和decode()的作用与区别:

在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

decode的作用是将其他编码的字符转换成unicode编码,如str1,decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串,如str2,encode(‘gb2312’),表示将unicode编码的字符串str2转换成gb2312编码。

常见文档读取有:

  1. TXT
  2. PDF

其中TXT文档的读取较为简单,爬取网页数据时注意read()的编码设置即可

我们主要来介绍使用pdfminer3k模块读取PDF

· 文档PDF的Python读取:

——英文PDF文件支持最好且只支持英文PDF是pyPDF2库
——而对于多语言PDF文件支持最好的则是pdfminer,我们这里就使用pdfminer3k库来实现读取PDF。

1. 安装pdfminer3k:

——pip install pdfminer3k
——python setup.py install`在这里插入代码片`

2. 验证安装pdfminer3k是否成功:

在cmd下,进入tools目录下( cd ~/Downloads/pdfminer3k-1.3.1/tools)后使用命令 ——python3 pdf2txt.py ../samples/simple1.pdf        #..是退回上一层目录的意思

3. Python读取PDF文档:

pdfminer3k中类的关系:

读取流程:

——打开pdf文档的文件对象:

fp = open("naacl06-shinyama.pdf", 'rb')     #本地文档
fp = urlopen('https://www.tencent.com/zh-cn/articles/802741466496787.pdf')   #在线pdf

——创建文档分析器(解析器):

pdf_parser = PDFParser(fp)       #传入pdf,从中获取数据

——创建文档对象,保存获取的数据:

pdf_doc = PDFDocument()     #保存获取的数据,和PDFParser是相互关联的

——连接分析器和文档对象:

pdf_parser.set_document(doc)
doc.set_parser(pdf_parser)

——判断文件是否允许文本提取:

 if not doc.is_extractable:raise PDFTextExtractionNotAllowed     #raise如果抛出异常,后续语句不执行

——对文档对象提供密码(password)初始化,没有就不用传该参数:

doc.initialize("")

——创建资源管理器:

resource = PDFResourceManager()      #用于存储共享资源,如字体或图像

——创建参数分析器:

laparam = LAParams()

——创建一个页面聚合器对象:

device = PDFPageAggregator(resource, laparams=laparam)

——创建一个页面解析器对象来处理页面内容:

interpreter = PDFPageInterpreter(resource, device)     #传入的是页面资源和聚合器对象

——获取page列表:

 doc.get_pages()

——使用页面解释器来读取:

interpreter.process_page(page)

——使用页面聚合器获得内容:

layout = device.get_result()       #这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象

——循环遍历取出聚合器获得的对象内容:

for out in layout:       if hasattr(out, 'get_text'):              #判断out对象是否具有get_text方法print(out.get_text())                 #输出out对象


Layout布局分析返回的PDF文档中的每个页面LTPage对象。这个对象和页内包含的子对象,形成一个树结构。如图所示:

树结构节点含义:

节点 含义
LTPage 表示整个页。可能会含有LTTextBox,LTFigure,LTImage,LTRect,LTCurve和LTLine子对象
LTTextBox 表示一组文本块可能包含在一个矩形区域。注意此box是由几何分析中创建,并且不一定表示该文本的一个逻辑边界。它包含LTTextLine对象的列表。使用 get_text()方法返回文本内容
LTTextLine 包含表示单个文本行LTChar对象的列表。字符对齐要么水平或垂直,取决于文本的写入模式。使用get_text()方法返回文本内容
LTAnno 在文本中字母实际上被表示为Unicode字符串。需要注意的是,虽然一个LTChar对象具有实际边界,LTAnno对象没有,因为这些是“虚拟”的字符,根据两个字符间的关系(例如,一个空格)由布局分析后插入
LTImage 表示一个图像对象。嵌入式图像可以是JPEG或其它格式,但是目前PDFMiner没有放置太多精力在图形对象
LTLine 代表一条直线。可用于分离文本或附图
LTRect 表示矩形。可用于框架的另一图片或数字。
LTCurve 表示一个通用的Bezier曲线

读取PDF文档完整实例:

from urllib.request import urlopen
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevicefrom pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams#获取文档
#fp = open("naacl06-shinyama.pdf", 'rb')
fp = urlopen('https://www.tencent.com/zh-cn/articles/802741466496787.pdf')#创建解释器
pdf_parser = PDFParser(fp)#PDF文档对象
doc = PDFDocument()#连接解释器和文档对象
parser.set_document(doc)
doc.set_parser(parser)#初始化文档
doc.initialize()#创建PDF资源管理器
resource = PDFResourceManager()# 创建一个PDF参数分析器
laparam = LAParams()# 创建聚合器
device = PDFPageAggregator(resource, laparams=laparam)#创建PDF页面解析器
interpreter = PDFPageInterpreter(resource, device)# 循环遍历列表,每次处理一页的内容
# doc.get_pages() 获取page列表for page in doc.get_pages():#使用页面解释器来读取interpreter.process_page(page)#使用聚合器获得内容layout = device.get_result()for out in layout:       if hasattr(out, 'get_text'):print(out.get_text())

Python读取PDF文档(或TXT)相关推荐

  1. 数据导入与预处理-第4章-数据获取python读取pdf文档

    数据导入与预处理-第4章-数据获取Python读取PDF文档 1 PDF简介 1.1 pdf是什么 2 Python操作PDF 2.1 pdfplumber库 2.2 pdfplumber基本操作 2 ...

  2. python读取pdf文档书签 bookmark_用Python为PDF文件批量添加书签

    平时看一些大部头的技术书籍,大多数都是PDF版的,而且有一些书籍是影印扫描版的,几百上千页的书,没有任何书签,想要找到一个章节的位置非常费劲.那么就想,能不能搞一个工具,来自动地为这些大部头的PDF书 ...

  3. python读取pdf文档书签 bookmark_pdf根据目录生成书签

    目录 1 准备 ①Adobe Acrobat ②Autobookmark插件 ③Python3.6 ④pdf电子书的目录bookmarks.txt 2 得到书签标准文件 2.1 bookmarks.t ...

  4. python读取pdf文档书签 bookmark_Python利用PyPDF2库获取PDF文件总页码实例

    Python中可以利用PyPDF2库来获取该pdf文件的总页码,可以根据下面的方法一步步进行下去: 1.首先,要安装PyPDF2库,利用以下命令即可: pip install PyPDF2 2.接着, ...

  5. python处理pdf实例_python 使用pdfminer3k 读取PDF文档的例子

    1.安装 pdfminer3k 通过pip安装: pip install pdfminer3k 下载安装:在网页 https://pypi.org/project/pdfminer3k/1.3.1/# ...

  6. 【Python】PDF文档导出指定章节为TXT

    PDF文档导出指定章节为TXT 需求 要导出3000多个pdf文档的特定章节内容为txt格式(pdf文字可复制). 解决 导出PDF 查了一下Python操作PDF文档的方法,主要是通过3个库,PyP ...

  7. 如何使用Python将PDF文档转为MP3音频

    老许小课堂开课了 一.转语音工具 微信读书里的电子书有配套的自动音频,而且声音优化的不错,比传统的机械朗读听起来舒服很多. 记得之前看到过Python有一个工具包,可以将文字转换为语音,支持英文和中文 ...

  8. python——读取docx文档wordcloud生成词云并进行词频统计

    文章目录 环境准备 导入库 读取docx并进行分词 词频 词云 设置背景图片(可选) 生成词云 保存词云并显示 环境准备 # 不是docx,是python-docx!!!!!!! pip instal ...

  9. 教你如何使用 Python 将 pdf 文档进行 加密 解密——python实用小技能分享

      上次说了怎么将word转换为pdf格式 及 实现批量将word转换为pdf格式(点击这里),这次我又get到一个新技能–使用 Python 将 pdf 文档进行 加密 解密,哈哈哈 希望帮到更多人 ...

最新文章

  1. 我隐藏的Excel工作表 你别想取消
  2. linux 错误处理命令,Linux运行脚本命令提示No such file or directory错误的解决办法
  3. 后端技术:Nginx 应用场景详解
  4. 扫地机器人隔板_【扫地机器人使用】_摘要频道_什么值得买
  5. 信息学奥赛一本通1349-最优布线问题
  6. wifi驱动总结(2)
  7. javascript调用ActiveX接口失败的解决方案及使用心得
  8. html5 机构化元素
  9. jenkins连接Linux
  10. 解决启动eureka报错Unable to start web ... nested exception is org.springframework.boot.web.server.WebS
  11. 塞尔达传说修改器html,塞尔达传说荒野之息内存修改器修改服装教程
  12. 历史影像高清晰历史卫星影像
  13. 零基础怎么学好3D建模?只需要了解下面几点
  14. Kuangbin 带你飞-线段树专题 题解
  15. SpringCloud自定义负载均衡策略--LoadBalancer
  16. 根号3表白html,数字表白公式 表白套路情话
  17. 42步进电机转速力矩曲线_步进电机的转速 – 转矩曲线
  18. python输出奇数数字序列_python在一串数字中选出奇数-女性时尚流行美容健康娱乐mv-ida网...
  19. Linux安装CentOS7操作系统详细教程
  20. 影响人类!写入历史!疫情年最值得铭记的6个大事件

热门文章

  1. VMware Workstation威睿工作站详解
  2. DecimalFormat 基本使用(数字格式化)
  3. 【一个小功能】从js判断ie版本,浅谈navigator对象的appName属性
  4. 5000词学英语——DAY7
  5. js实现二分查找(二分搜索)
  6. C#利用绝对值打印菱形
  7. 神奇的cyclegan!
  8. DXC Technology和Google Cloud宣布缔结全球合作关系,共同推动企业大规模创新
  9. 通信协议基础知识总结二
  10. 直播进行时:抓亮点、控节奏、营造氛围