Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >60行Python代码,实现多线程PDF转Word

60行Python代码,实现多线程PDF转Word

作者头像
一墨编程学习
发布于 2019-05-08 02:29:14
发布于 2019-05-08 02:29:14
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

工作中经常会遇到需要提取PDF文件中文字的情况,一个PDF还好,复制粘贴一下也花不了太多时间,如果需要把大量PDF转为Word,怎么办呢?

今天教大家用60行代码实现,多线程批量PDF转Word。没兴趣看具体过程可以直接拉到最后,有代码。


分解任务

把PDF转为Word,分几步?两步,第一步读取PDF文件,第二步写入Word文件。

是的,就是这么简单,借助Python第三方包,可以轻松实现上面两个过程,我们要用到pdfminer3kpython-docx这两个包。


读取PDF

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams

resource_manager = PDFResourceManager()
return_str = StringIO() 
lap_params = LAParams()

device = TextConverter(resource_manager, return_str, laparams=lap_params)
process_pdf(resource_manager, device, file)  # file是使用open方法打开的PDF文件句柄
device.close()

# 此处content就是转换为文字的PDF内容
content = return_str.getvalue()

content变量存储的就是我们从PDF文件中读取出的文字内容,可以看到,使用pdfminer3k可以轻松完成这个任务。接下来我们需要把文字内容写入成一个word文件。


写入Word

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from docx import Document

doc = Document()
for line in content.split('\n'):
    paragraph = doc.add_paragraph()
    paragraph.add_run(remove_control_characters(line))
doc.save(file_path)

content是我们前面读取出的文字内容,由于是讲整个PDF读成一个字符串,所以需要使用split方法将每一行分隔开,然后按行写入word,否则所有的文字会在同一行。同时这段代码使用了一个remove_control_characters函数,这个函数是需要自己实现的,目的是移除控制字符(换行符、制表符、转义符等),因为python-docx是不支持控制字符写入的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def remove_control_characters(content):
    mpa = dict.fromkeys(range(32))
    return content.translate(mpa)

控制字符就是ASCII码在32以下的,所以我们使用str的translate方法,把32以下的字符移除就可以。


用是能用,但是太慢了!

如果我们用上面代码去转换100个PDF文件,就会发现速度慢到难以接受,每个PDF都需要花很长时间才能转换好,怎么办?别急,接下来我们引入多线程,同时转换多个PDF,可以有效加快转换速度。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import os
from concurrent.futures import ProcessPoolExecutor

with ProcessPoolExecutor(max_workers=int(config['max_worker'])) as executor:
    for file in os.listdir(config['pdf_folder']):
        extension_name = os.path.splitext(file)[1]
        if extension_name != '.pdf':
            continue
        file_name = os.path.splitext(file)[0]
        pdf_file = config['pdf_folder'] + '/' + file
        word_file = config['word_folder'] + '/' + file_name + '.docx'
        print('正在处理: ', file)
        result = executor.submit(pdf_to_word, pdf_file, word_file)
        tasks.append(result)
while True:
    exit_flag = True
    for task in tasks:
        if not task.done():
            exit_flag = False
    if exit_flag:
        print('完成')
        exit(0)

代码中config是包含存储PDF文件夹地址和word文件夹地址的字典,使用Python标准库中的concurrent包,实现多进程,pdf_to_word方法是对上面读取PDF和写入word逻辑的封装。后面的while循环是查询任务是否进行完成。


效果

到这里,我们已经实现了多线程批量转换PDF为word文档。拿谋篇著名文章来试验一下,效果如图(左侧是转换后的word,右侧是PDF):


不想写代码,只想用

本文介绍的所有代码,已经打包成了一个独立可运行的项目,存放在github,如果不想自己写代码,可以直接clone或下载github项目运行。项目地址如下(记得点star):

simpleapples/pdf2word​github.com

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.04.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PDF转Word完全免费?这么好的事情我怎么不知道????
现在网络上大部分的PDF转Word都是收费的,基本都是按页收费,有了我们的python代码后,我们就可以完全免费的将PDF转成Word了,这么好的福利我们赶紧来了解一下吧!
我被狗咬了
2019/09/23
8990
PDF转Word完全免费?这么好的事情我怎么不知道????
秋季招聘季如何制作一款“秀色可餐”的简历?由ShareLatex和Python3打造
    说起简历模板,大家一定不会陌生,随便在百度搜关键词“简历模板”,林林总总的会出现一大片,但是这些简历模板往往都会有一个共同点,就是太Low、“土味”重、没有时代感、味同嚼蜡,蜡都要顺着嘴角流下来了,以一个求职者的视角来看待这些简历都会无奈心烦,更别说招聘者了。所以新时代的简历应该具备独特性、新颖、与众不同并且不落窠臼。
用户9127725
2022/08/08
3670
秋季招聘季如何制作一款“秀色可餐”的简历?由ShareLatex和Python3打造
爬虫系列:读取 CSV、PDF、Word 文档
上一期我们讲解了使用 Python 读取文档编码的相关问题,本期我们讲解使用 Python 处理 CSV、PDF、Word 文档相关内容。
太后
2022/01/12
3.2K0
太方便了!利用Python对批量Pdf转Word
在wps或者office里面可以将pdf转word,不过只能免费转前面5页,超过5页就需要会员。今天教大家一个Python办公小技巧:批量Pdf转Word ,这样可以自由想转多少页都可以。
Python研究者
2021/06/22
1.3K0
太方便了!利用Python对批量Pdf转Word
手把手 | 20行Python代码教你批量将PDF转为Word
大数据文摘作品 投稿作者|丁彦军 在日常工作或学习中,经常会遇到这样的无奈: “小任,你把这个PDF中的文件码出来发我” 艹,倒霉,2M的PDF12点也完不了啊! 很多时候在学习时发现许多文档都是PDF格式,PDF格式却不利于学习使用,因此需要将PDF转换为Word文件,但或许你从网上下载了很多软件,但只能转换前五页(如WPS等),要不就是需要收费,那有没有免费的转换软件呢? so,我们给各位带来了一个免费简单快速的方法,手把手教你用Python批量处理PDF格式文件,获取自己想要的内容,存为word形式。
大数据文摘
2018/05/24
2K0
python提取pdf文本内容
Layout布局分析返回的PDF文档中的每个页面LTPage对象。这个对象和页内包含的子对象,形成一个树结构。如图所示: 
周小董
2019/03/25
3.7K0
python提取pdf文本内容
如何将pdf转换为word 3.0
相对于封装的软件,python和R的操作需要稍微折腾一下。浏览论坛的时候的发现了一款轻量级程序,尝试了一下还不错,看一下转换的效果:
生信菜鸟团
2020/08/04
1.9K0
如何将pdf转换为word 3.0
使用pdfminer提取PDF文件中的文字
和word文档一样,pdf文件也拥有强大的排版功能。对于pdf的编程操作而言,分为读和写两大类,其中读是相对简单的一种,比如读出pdf文件中的文字,写是比较难的,除了文字,图片等基本元素,最重要的是排版的样式控制,而编程还无法满足样式的灵活性。
生信修炼手册
2020/12/11
5.9K0
媳妇儿让我给她找一个PDF转word免费工具,找了半天我决定给她写一个出来^-^
之前我媳妇儿让我给她找一个PDF转WORD的免费工具,在网上找了半天发现要不就是收费,要不就是转化的格式混乱。既然网上不能找到好用的免费工具那就直接来写一个吧。人生苦短,我用python。
菜鸟小白的学习分享
2020/07/14
5210
Python:解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比
pdfminer3k 是 pdfminer 的 python3 版本,主要用于读取 pdf 中的文本。
丹枫无迹
2019/01/22
19K1
Python读取PDF内容
1,引言 晚上翻看《Python网络数据采集》这本书,看到读取PDF内容的代码,想起来前几天集搜客刚刚发布了一个抓取网页pdf内容的抓取规则,这个规则能够把pdf内容当成html来做网页抓取。神奇之处要归功于Firefox解析PDF的能力,能够把pdf格式转换成html标签,比如,div之类的标签,从而用GooSeeker网页抓取软件像抓普通网页一样抓取结构化内容。 从而产生了一个问题:用Python爬虫的话,能做到什么程度。下面将讲述一个实验过程和源代码。 2,把pdf转换成文本的Python源代码 下面的python源代码,读取pdf文件内容(互联网上的或是本地的),转换成文本,打印出来。这段代码主要用了一个第三方库PDFMiner3K把PDF读成字符串,然后用StringIO转换成文件对象。(源代码下载地址参看文章末尾的GitHub源)
py3study
2020/01/10
2.1K0
python pdf
# 从pdf中读取文本 # 写pdf # 加密解密pdf # 和平pdf,加水印 # pip install PyPDF2 %cd D:\python全站\office import PyPDF2 D:\python全站\office pdf_obj = open('coop.pdf', 'rb') pdf = PyPDF2.PdfFileReader(pdf_obj) pdf.numPages 3 page = pdf.getPage(0) page.extractText() # 提取文件 '\n\n
py3study
2020/01/08
9070
python3读取pdf文件
一.安装pdfminer3k模块 二.读取pdf文件 import sys import importlib importlib.reload(sys) from pdfminer.pdfparse
py3study
2020/01/10
2.3K0
Python | PDF 提取文本的几种方法
常见的 PDF 文件可以分为两类:一种是文本转化而成(Text-Based),通常可以直接复制和粘贴;另一种是扫描文件而成(Scanned),比如影印书籍、插入图片制成的文件。依据此分类,将 Python 中处理 PDF 文件的第三方库可以简单归类:
PyStaData
2021/05/18
13K0
Python | PDF 提取文本的几种方法
一个薪资double的捷径:自动化简历内推工具
最近,小编在处理简历时,发现大量简历需要一个个打开文件,复制姓名、邮箱、电话号码、学历等关键信息,效率特别低且部分文件无法直接复制。于是,小编便写了文件阅读工具的脚本,支持文件格式有:doc,docx,pdf。
不吃西红柿
2022/07/29
4880
使用pdfminer解析pdf文件
最近要做个从 pdf 文件中抽取文本内容的工具,大概查了一下 python 里可以使用 pdfminer 来实现。下面就看看怎样使用吧。
kongxx
2018/12/27
1.8K0
三大神器助力Python提取pdf文档信息
今天这篇文章是今年最后一篇文章了,因此也是一篇非常有用的技术文章,你可以现在只了解一下并进行收藏,等你需要用到的时候再拿出来看一看,这样就好了。
啃饼思录
2019/02/26
20.8K0
攻防世界web进阶区FlatScience详解
判定POST提交的usr和pw是否存在,很显然usr处存在注入 这里提醒是sqlite数据库
wuming
2021/01/18
2.3K0
实践教程:使用DeepSeek实现PDF转Word的高效方案
PDF文件因其跨平台、格式稳定的特性被广泛使用,但在内容编辑场景中,用户常需将PDF转换为可编辑的Word文档。传统的付费工具(如Adobe Acrobat)或在线转换平台存在成本高、隐私风险等问题。本文将使用pdf2docx库进行格式保留转换,并提供两种实现方式(基础版和增强版)
知识浅谈
2025/05/18
1460
❤️ 6个Python办公黑科技,工作效率提升100倍!HR小姐姐都馋哭了(附代码)❤️
环境准备:python 3.6 、mac(下文中doc转docx是mac写法,windows更简单,导入win32的包即可)
不吃西红柿
2022/09/19
3700
❤️ 6个Python办公黑科技,工作效率提升100倍!HR小姐姐都馋哭了(附代码)❤️
推荐阅读
相关推荐
PDF转Word完全免费?这么好的事情我怎么不知道????
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验