好玩的Python 篇一:用Python显示和处理PDF文件

2020-05-25 00:20:30

0点赞

0收藏

0评论

pdf是电子书,文档经常会用的格式,除了下载各种阅读器以外,我们也可以用Python批量处理大量PDF文件。本文用到了pypdf2,pdfminer.six,pdf2image来做常规处理。

pypdf2 获取pdf的基本信息,如作者,书名,页数等

5 from PyPDF2 import PdfFileReader

6

7 def extract_information(pdf_path,filename):

8 try:

9 with open(pdf_path, 'rb') as f:

10 pdf = PdfFileReader(f)

11 information = pdf.getDocumentInfo()

12 number_of_pages = pdf.getNumPages()

13

14 title=filename.split('.pdf')[0]

15 if information.title is not None and len(information.title)>0:

16 title=information.title

17 print(f"{title} page : {number_of_pages}")

18 except Exception as e:

19 pass

基于文字的PDF

pdfminer.six 可以取出文本

8 from io import StringIO

9 from pdfminer.layout import LAParams

10 from pdfminer.high_level import extract_text_to_fp

16 def get_text(path):

17 output_string = StringIO()

18 with open(path, 'rb') as fin:

19 extract_text_to_fp(fin, output_string)

20 print(output_string.getvalue().strip())

基于扫描图片的PDF

pdf2image 可以提出所有页面存为图片,但因为IO的性能问题。作者提出最好用SSD硬盘和多线程。

6 from pdf2image import convert_from_path

12 def get_cover(path,filename):

13 images=convert_from_path(path)

14 images[0].save(filename+'.jpg')

上面的代码把封面(第一页)取了出来,保存为图片

批量处理

我们可以用Python自带的文件处理功能,结合上面的三个函数,批量处理books目录下的大量pdf文件。

38 if __name__ == '__main__':

39 book_folder=os.path.join(Path.home(),'books')

40 for pdf in os.listdir(book_folder):

41 if pdf.endswith('.pdf'):

42 path=os.path.join(book_folder,pdf)

43 title,page=extract_information(path,pdf)

44 if page>0 and page<50:

45 get_text(path)

46 get_cover(path,pdf)

python处理pdf文件_好玩的Python 篇一:用Python显示和处理PDF文件相关推荐

  1. python批量处理视频教程_《自拍教程72》Python批量重命名视频文件,AV专家必备!...

    案例故事: 任何一款终端产品只要涉及视频播放,就肯定涉及视频的解码播放测试, 作为一名专业的多媒体测试人员,我们需要一堆的规范的标准视频测试文件, 但是发现现有的视频资源名字命名的很随意比如:big_ ...

  2. python批量命名教程_《自拍教程69》Python 批量重命名音频文件,AV专家必备!

    本篇主要学习如何Python自定义模块并调用该模块,并重点介绍Python正则表达式的强大的文本处理能力. 案例故事:任何一款终端产品只要涉及音频输出,就肯定涉及音频的解码, 作为一名专业的AV (A ...

  3. python程序编译之后、找不到生成的pyc文件_为什么主要的可运行的Python脚本没有被编译为pyc文件,如模块?...

    当模块加载时,py文件被"字节编译"为pyc文件.时间戳记记录在pyc文件中. 这样做不会使其运行速度更快,但加载速度更快. 因此,当您加载它们时,"字节编译" ...

  4. python目录及文件_零基础小白必看:python基本操作-文件、目录及路径

    1 前言 在最近开发中,经常需要对文件进行读取.遍历.修改等操作,想要快速.简单的完成这些操作,我选择用 python .通过 python 的标准内置 os 模块,只需要几行代码,即可完成想要的操作 ...

  5. cmd运行python脚本处理其他文件_如何在cmd命令行里运行python脚本

    在电脑安装好python软件之后即可通过cmd命令行运行python脚本文件.不过有些小伙伴不懂,今天小编我就来说一下cmd命令行如何运行python脚本文件. 工具/原料 电脑 python 3 方 ...

  6. python秒表小项目_适合新手练习的几个python小项目

    关于python练习的小项目,其实就是一些常用的模块的针对练习 一.找出电脑中遗忘的大文件 # !/usr/bin/env python # _*_ coding:utf-8 -*- import o ...

  7. python 只循环目录_看完这篇文章,你的Python基础就差不多了

    世界那么大,谢谢你来看我!!关注我你就是个网络.电脑.手机小达人 前言 本文是基于黑马程序员2019年的Python基础班的内容编写的,以2019年的资料为蓝本,2018年的资料为补充,还参考了一些网 ...

  8. python ide如何运行_如何在Ubuntu上安装IDLE Python IDE

    什么是IDLE? IDLE代表一世ntegratedd前夕大号opmentËnvironment.它是用于Python的IDE,使用Python语言本身编写,基于Tkinter并绑定到Tk小部件集. ...

  9. mac终端python删除键不能用_我把mac 系统下的python目录删掉了怎么办

    先去python的官网下载32313133353236313431303231363533e78988e69d8331333363393662最新的python,默认路径安装好. 现在要删除mac自带 ...

最新文章

  1. mysql text index_MySQL 全文索引(fulltext index)
  2. java通过url读取远程数据并保持到本地
  3. 在Web界面中实现Excel数据大量导入的处理方式
  4. Error:No resource identifier found for attribute 'appComponentFactory' in packag
  5. CodeForce 237C Primes on Interval(二分+ 素数筛法)
  6. 【Objective-C】java中的interface与Objective-C中的interface的区别
  7. protobuf使用错误总结
  8. Linux之gdb基本调试命令与总结
  9. 网络基础---网络层
  10. php pcntl实现多进程
  11. 服务器一定要改默认端口
  12. 框架之---Flask
  13. Android源码下载repo以及repo init总结
  14. 锁定计算机怎么设密码忘记了怎么办,如何设置笔记本电脑指纹密码忘了怎么办...
  15. Defaulting to user installation because normal site-packages is not writeable
  16. python中os库是标准库还是第三方库_Python os 标准库使用
  17. python酒店数据分析_python数据分析实战——AirBnb用户分群
  18. 基于大数据的精准营销与应用场景
  19. Excel·VBA工作簿拆分所有工作表单独保存
  20. 解决黑苹果和Windows双系统时,时钟不同步的问题

热门文章

  1. 每日一皮:为这位姑娘的回答鼓掌!
  2. 码农与架构师之间的差距,究竟在哪里?
  3. zbg是什么意思_zbg的含义,zbg是什么的缩写,zbg的词语,zbg代表的意思
  4. 小学数学开灯问题_包含数学暑假答案的一年级数学假期作业题
  5. Swish激活 hswish激活
  6. RuntimeError: cudnn64_7.dll not found.
  7. Python递归实现快速排序
  8. oculus ios学习资料整理
  9. php插入mysql数据返回id
  10. Check failed: error == cudaSuccess (8 vs. 0) invalid device function