pandas 提取数字_经验轻松提取Meta原始文献特征
经验|轻松提取Meta原始文献特征
Python 办公小助手:读取 PDF 中表格并重命名
日常工作中,我们或多或少都会接触到 Excel 表格、Word 文档和 PDF 文件。偶尔来个处理文件的任务,几个快捷键操作一下——搞定!但是,偏偏有些烦人的工作,操作繁琐且数据复杂,更要命的是耗时间,吭哧吭哧一下午却难出几个成果。
此时如果我们掌握些 Python 编程的技巧,整理下文件处理的流程通过编码来实现,不仅省时省力省心,还可以精进编码技术。今天我们就通过一个 PDF 处理的实例来演示下 Python 助力办公的过程。
上周朋友提了个 PDF 处理的问题,要求如下:
大致整理下,这问题和把大象装冰箱一样要分三步:
读取 PDF 中的表格内容
在表格内容中提取特定数据
以特定数据对文件重命名
此时面向 Python 默默许愿:要是 Python 中有现成的模块可以直接读取 PDF 中的表格就好了!
心愿达成!确实有个 tabula 模块可以直接解析 PDF 中的表格:
tabula-py is a simple Python wrapper of tabula-java, which can read table of PDF. You can read tables from PDF and convert into pandas's DataFrame. tabula-py also enables you to convert a PDF file into CSV/TSV/JSON file.
https://pypi.org/project/tabula-py/
如上所述, tabula-py 是 tabula-java 的一个封装模块,可以将 PDF 中的表格数据转化为 pandas 的 DataFrame 格式。
注意,安装 tabula-py 时命令是 pip install tabula-py,但导入时是 import tabula。
此外,该模块由于是对 tabula-java 的封装依赖 java,需要安装 java 才能正常调用。并且由最终转化得到的数据格式也可以看出,此模块也依赖 pandas 和 numpy,需要自行导入。
详细链接:https://pypi.org/project/tabula-py/
安装好 tabula-py,我们也准备一份 PDF 文件(demo.pdf)用于演示代码:
现在任务更清晰了:读取 demo.pdf 文件中的 “批号(款号)”数据:
"批号(款号)":"DRDY173131441HHDKD QWOEP23"
最终将这一串批号数据当作名字给 PDF 重命名,生成 DRDY...EP23.pdf 文件。
如果你能坚持看到这里,我准备向你推荐下 jupyter notebook。因为它可以按代码块执行,上下代码块之间变量可以共用,同时会直接显示代码块运行结果。拿它用来做代码及运行结果展示非常好用——下文记录的过程就是通过它运行代码截图所得。
1. 首先,导入 tabula,使用其函数读取 PDF 中的表格数据:
由所得结果大致可以看出,我们想要的批号数据是在第二列。
2. 之前提到读到的 PDF 表格数据是 DataFrame 格式,可以用 help 函数确认下:
3. 由表格数据中提取其每一列的名称:
4. 根据目测分析,批号位于第二列,所以提取第二列名字:
5. 通过 DataFrame["列名称"] 来定位到该列具体数据:
6. 通过 for 循环逐一打印此列数据,提取其中“批号”数据:
这里直接采用的是 "批号" in 字符串 的语法,倘若数据字符串中含有“批号”二字就会被筛选出,最终我们也如愿拿到了“批号数据”并赋值给 target 变量。
7. 拿到了“批号”数据,我们只选取字母数字拼接的数据串。接下来采用正则表达式,按照批号数据格式中只包含大写字母、数字以及中间会夹杂空格,制定匹配模式进行匹配提取:
最终我们拿到了批号数据串赋值给 result 变量。
8. 最终我们利用 os 模块将文件夹内的 “demo.pdf” 重命名为 result 所代表的批号数据串.pdf :
注意,这里的 f"{变量}字符串内容" 是格式化字符串的形式。
至此,我们完成了对单份 PDF 处理的完整流程。接下来我们可以多试几份不同 PDF 寻找共同的提取批号数据的规律,将其整理成连贯、简洁的最终版代码:
#!/usr/bin/env python# encoding: utf-8# @Time : 2019-10-24 21:39__author__ = 'Ted'import tabulaimport reimport os# 将提取单一 PDF 文件内批号数据的过程定义成 get_target("pdf名称") 函数,最终函数将数据返回def get_target(filename): df = tabula.read_pdf(filename) pattern = r'[A-Z0-9]+[\s]*[A-Z0-9]*' for item_sub in df[df.columns[1]]: if "批号" in str(item_sub): result = re.search(pattern,item_sub).group() return result return Falseif __name__=="__main__": # 获取 PDF 所在文件夹 folder = "test" # os 模块定位到该文件夹 os.chdir(folder) # 获取文件夹内文件列表 pdflist = os.listdir() # 打印该文件列表 print(pdflist) # 对文件列表 for 循环处理 for item in pdflist: # 如果该文件名称最后四位是 .pdf 或 .PDF,即我们要找的 PDF 文件 if item[-4:] in [".pdf",".PDF"] : # 对该文件进行提取批号函数操作,将批号数据赋值给 new_name new_name = get_target(item) # 如果不为空,即获取到了批号数据 if new_name: # 对文件进行重命名操作 os.rename(item,f"{new_name}.pdf") print("重命名成功!")
如果我们有大量 PDF 文件都要提取文件内的批号数据进行重命名,可以将其放到同一个文件夹中,然后只要在最终代码中修改 folder = "文件夹名称",运行代码等待几秒,便可微微一笑任务搞定了。
以上,感谢阅读~
欢迎咨询小编微信:ZGYJT84628858
添加小编微信 开启您的科研之路
平台推出以下服务,欢迎小伙伴们咨询~
职称论文发表|普刊|核心期刊|SCI|毕业论文|科研课题写作|专利协助申请|专著出版|
pandas 提取数字_经验轻松提取Meta原始文献特征相关推荐
- mysql提取数字_Mysql中实现提取字符串中的数字的自定义函数分享
因需要在mysql的数据表中某一字符串中的字段提取出数字,在网上找了一通,终于找到了一个可用的mysql函数,可以有效的从字符串中提取出数字. 该mysql提取出字符串中的数字函数如下: 复制代码 代 ...
- awk 内嵌正则 提取字符串_使用awk提取字符串中的数字或字母
1.提取字符串中的数字 $ echo 'dsFUs34tg*fs5a%8ar%$#@' |awk -F "" ' { for(i=1;i<=NF;i++) { if ($i ...
- java 只提取数字_如何从字符串中批量的提取数字-百度经验
集合类库 import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public clas ...
- 通过身份证号提取性别_身份证号提取生日、年龄、性别、籍贯,最简单的方法!...
上一期,Amy跟大家分享了如何从身份证号中提取出生日期.今天我们继续来讲如何提取年龄.性别.籍贯. 身份证号提取年龄 ✦思路:在E2单元格输入公式"=DATEDIF(D2,TODAY(),& ...
- java 正则 提取数字_java使用正则提取字符串中的数字(例如提取短信中的验证码)详解...
使用java正则可以很方便的从字符串中提取符合条件的内容. 1.提取字符串中所有的手机号: private void getPhoneNum(String smsBody) { Pattern pat ...
- dds提取工具_多媒体资源提取工具(MultiExtractor)
MultiExtractor-软件资源提取器下载,支持从exe.dll等可执行文件中提取图片.图标.音频.视频等多媒体资源. 相关软件软件大小版本说明下载地址 软件资源提取器MultiExtracto ...
- 提取过程_大米多肽提取过程中如何应用膜分离技术呢?
大米多肽是大米蛋白质经蛋白酶作用后,再经特殊处理而得到的蛋白质水解产物,大米多肽主要含有肽分子混合组分及少量的游离AA.糖类.水份和无机盐等.大米多肽可以调节人体的生长.发育.免疫调节和新陈代谢,使人 ...
- 怎么把线稿提取出来_如何快速提取漫画线稿?【漫画技巧】
最近,有好多小伙伴在问我怎么提取线稿,作为画画界的活雷锋,漫联教育最靓的崽,今天鹏叔就要给大家分享一波提取线稿操作( 回首掏?),超级简单的,货不多说,看操作: ①打开PS拉入我们要提取线稿的图片: ...
- dds提取工具_游戏资源提取器(game extractor)
game extractor提供游戏资源获取功能,可以帮助用户在软件上快速将游戏中的资源提取,您可以将游戏文件添加到软件,随后选择需要提取的格式,可以选择对视频.音乐.素材.xml文件等内容提取,方便 ...
最新文章
- 关闭iptables和SELINUX
- 【数据结构】栈的压入、弹出序列
- linux 系统kill用法
- 路由器选华硕还是tp_路由器的坑太多,就算写着“千兆”你也要当心丨618选购指南...
- 智能机器人及其应用ppt课件_一文了解!伺服系统机理及其在工业机器人等领域的应用...
- python在材料方面的应用_python记录材料题带标准答案
- SpringCloud学习5-如何创建一个服务提供者provider
- 财会法规与职业道德【18】
- MediaRecorder录制视频和录音
- 胡子决定编程语言运势[转载]
- python用matplotlib画五角星_3.用Python画五角星
- 数据库——sql-server
- php c端,蛋白测序(N端,C端测序)
- 14个种类,600款笔刷!如何做一套属于自己的精美笔刷?
- linux 内核链表
- navicat for MySql 11 破解版
- ffmpeg支持MP3编码的方法
- Leetcode 1110.删点成林(Delete Nodes And Return Forest)
- js 年 年-月 年-月-日 正则表达式
- 西门子PLC配KUKA机器人程序 程序为西门子S7-1500PLC博途调试: 西门子与KUKA机器人通讯