pandas 提取数字_经验轻松提取Meta原始文献特征
經(jīng)驗(yàn)|輕松提取Meta原始文獻(xiàn)特征
Python 辦公小助手:讀取 PDF 中表格并重命名
日常工作中,我們或多或少都會(huì)接觸到 Excel 表格、Word 文檔和 PDF 文件。偶爾來個(gè)處理文件的任務(wù),幾個(gè)快捷鍵操作一下——搞定!但是,偏偏有些煩人的工作,操作繁瑣且數(shù)據(jù)復(fù)雜,更要命的是耗時(shí)間,吭哧吭哧一下午卻難出幾個(gè)成果。
此時(shí)如果我們掌握些 Python 編程的技巧,整理下文件處理的流程通過編碼來實(shí)現(xiàn),不僅省時(shí)省力省心,還可以精進(jìn)編碼技術(shù)。今天我們就通過一個(gè) PDF 處理的實(shí)例來演示下 Python 助力辦公的過程。
上周朋友提了個(gè) PDF 處理的問題,要求如下:
大致整理下,這問題和把大象裝冰箱一樣要分三步:
讀取 PDF 中的表格內(nèi)容
在表格內(nèi)容中提取特定數(shù)據(jù)
以特定數(shù)據(jù)對(duì)文件重命名
此時(shí)面向 Python 默默許愿:要是 Python 中有現(xiàn)成的模塊可以直接讀取 PDF 中的表格就好了!
心愿達(dá)成!確實(shí)有個(gè) 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 的一個(gè)封裝模塊,可以將 PDF 中的表格數(shù)據(jù)轉(zhuǎn)化為 pandas 的 DataFrame 格式。
注意,安裝?tabula-py 時(shí)命令是?pip install tabula-py,但導(dǎo)入時(shí)是 import tabula。
此外,該模塊由于是對(duì) tabula-java 的封裝依賴 java,需要安裝 java 才能正常調(diào)用。并且由最終轉(zhuǎn)化得到的數(shù)據(jù)格式也可以看出,此模塊也依賴 pandas 和 numpy,需要自行導(dǎo)入。
詳細(xì)鏈接:https://pypi.org/project/tabula-py/安裝好 tabula-py,我們也準(zhǔn)備一份 PDF 文件(demo.pdf)用于演示代碼:
現(xiàn)在任務(wù)更清晰了:讀取 demo.pdf 文件中的 “批號(hào)(款號(hào))”數(shù)據(jù):
"批號(hào)(款號(hào))":"DRDY173131441HHDKD?QWOEP23"最終將這一串批號(hào)數(shù)據(jù)當(dāng)作名字給 PDF 重命名,生成 DRDY...EP23.pdf 文件。
如果你能堅(jiān)持看到這里,我準(zhǔn)備向你推薦下 jupyter notebook。因?yàn)樗梢园创a塊執(zhí)行,上下代碼塊之間變量可以共用,同時(shí)會(huì)直接顯示代碼塊運(yùn)行結(jié)果。拿它用來做代碼及運(yùn)行結(jié)果展示非常好用——下文記錄的過程就是通過它運(yùn)行代碼截圖所得。
1. 首先,導(dǎo)入 tabula,使用其函數(shù)讀取 PDF 中的表格數(shù)據(jù):
由所得結(jié)果大致可以看出,我們想要的批號(hào)數(shù)據(jù)是在第二列。
2. 之前提到讀到的 PDF 表格數(shù)據(jù)是 DataFrame 格式,可以用 help 函數(shù)確認(rèn)下:
3. 由表格數(shù)據(jù)中提取其每一列的名稱:
4. 根據(jù)目測分析,批號(hào)位于第二列,所以提取第二列名字:
5. 通過 DataFrame["列名稱"]?來定位到該列具體數(shù)據(jù):
6. 通過 for 循環(huán)逐一打印此列數(shù)據(jù),提取其中“批號(hào)”數(shù)據(jù):
這里直接采用的是?"批號(hào)" in 字符串?的語法,倘若數(shù)據(jù)字符串中含有“批號(hào)”二字就會(huì)被篩選出,最終我們也如愿拿到了“批號(hào)數(shù)據(jù)”并賦值給 target 變量。
7. 拿到了“批號(hào)”數(shù)據(jù),我們只選取字母數(shù)字拼接的數(shù)據(jù)串。接下來采用正則表達(dá)式,按照批號(hào)數(shù)據(jù)格式中只包含大寫字母、數(shù)字以及中間會(huì)夾雜空格,制定匹配模式進(jìn)行匹配提取:
最終我們拿到了批號(hào)數(shù)據(jù)串賦值給 result 變量。
8. 最終我們利用 os 模塊將文件夾內(nèi)的?“demo.pdf”?重命名為 result 所代表的批號(hào)數(shù)據(jù)串.pdf :
注意,這里的 f"{變量}字符串內(nèi)容" 是格式化字符串的形式。
至此,我們完成了對(duì)單份 PDF 處理的完整流程。接下來我們可以多試幾份不同 PDF 尋找共同的提取批號(hào)數(shù)據(jù)的規(guī)律,將其整理成連貫、簡潔的最終版代碼:
#!/usr/bin/env python# encoding: utf-8# @Time : 2019-10-24 21:39__author__ = 'Ted'import tabulaimport reimport os# 將提取單一 PDF 文件內(nèi)批號(hào)數(shù)據(jù)的過程定義成 get_target("pdf名稱") 函數(shù),最終函數(shù)將數(shù)據(jù)返回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 "批號(hào)" in str(item_sub): result = re.search(pattern,item_sub).group() return result return Falseif __name__=="__main__": # 獲取 PDF 所在文件夾 folder = "test" # os 模塊定位到該文件夾 os.chdir(folder) # 獲取文件夾內(nèi)文件列表 pdflist = os.listdir() # 打印該文件列表 print(pdflist) # 對(duì)文件列表 for 循環(huán)處理 for item in pdflist: # 如果該文件名稱最后四位是 .pdf 或 .PDF,即我們要找的 PDF 文件 if item[-4:] in [".pdf",".PDF"] : # 對(duì)該文件進(jìn)行提取批號(hào)函數(shù)操作,將批號(hào)數(shù)據(jù)賦值給 new_name new_name = get_target(item) # 如果不為空,即獲取到了批號(hào)數(shù)據(jù) if new_name: # 對(duì)文件進(jìn)行重命名操作 os.rename(item,f"{new_name}.pdf") print("重命名成功!")如果我們有大量 PDF 文件都要提取文件內(nèi)的批號(hào)數(shù)據(jù)進(jìn)行重命名,可以將其放到同一個(gè)文件夾中,然后只要在最終代碼中修改 folder =?"文件夾名稱",運(yùn)行代碼等待幾秒,便可微微一笑任務(wù)搞定了。
以上,感謝閱讀~
歡迎咨詢小編微信:ZGYJT84628858
添加小編微信? ?開啟您的科研之路
平臺(tái)推出以下服務(wù),歡迎小伙伴們咨詢~
職稱論文發(fā)表|普刊|核心期刊|SCI|畢業(yè)論文|科研課題寫作|專利協(xié)助申請(qǐng)|專著出版|
總結(jié)
以上是生活随笔為你收集整理的pandas 提取数字_经验轻松提取Meta原始文献特征的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shiro权限管理_重量级课程发布~企业
- 下一篇: 弹出此设备可提高性能怎么处理 如何优化设