摘要:主要用來調用命令行,因為模塊無法解析的文件,所以在解析前將的文件轉換成文件。主要用于遍歷文件夾獲取文件。總結利用還是減少了一定的重復勞動,但面對一些不標準的東東貌似還沒有很好的方式。
目前我的文件夾中有500多份簡歷,如果我想知道一些信息,比如學校,學歷之類的,我需要打開每一份word去查看,太耗時間了。這個時候python需要出馬了。目標
目前類似截圖中的word有600+,想簡單的進行整理:
可以整理出一份excel用于導航(類似目錄),可以通過excel來快速定位到所要的附件,如下圖效果:
具體實現有了目標,就具體說說如何實現的,整理思路還是比較簡單的,就是遍歷所有的word文件,將word中關鍵的信息獲取到并保存到excel中。
這里列下主要用到的模塊:
import xlsxwriter import subprocess import os import docx import sys import re
xlsxwriter主要用來操作excel,xlsxwriter只能用來寫,效率上比xlwt要高,數據量不多,用xlwt也ok。
subprocess主要用來調用命令行,因為docx模塊無法解析doc的word文件,所以在解析前將doc的文件轉換成docx文件。
os主要用于遍歷文件夾獲取文件。
docx主要用來解析word文檔。
規范下文件名首先我們先規范下文件名稱,因為在使用subprocess.call調用命令時,空格,特殊符號之類的沒辦法轉義導致報錯,所以干脆在之前就清理掉這個潛在問題。
def remove_doc_special_tag(): for filename in os.listdir(path): otherName = re.sub("[s+!/_,$%^*(+"")]+|[+——()?【】“”!,。?、~@#¥%……&*()]+", "",filename) os.rename(os.path.join(path,filename),os.path.join(path,otherName))遍歷文件
之后我們就可以開始正題,遍歷每個文件進行解析:
path="/Users/cavin/Desktop/files" for filename in os.listdir(path): ...具體邏輯...
這里碰到一個問題,首先是docx模塊無法解析doc的word文檔,由于又是使用的mac,所以也無法使用win32com模塊,這個問題就比較尷尬,后來google發現可以通過命令將doc轉換成docx。
這里注意下轉換后的docx文件樣式是丟失的,但這不影響我獲取文本信息。
于是就有了這段代碼,如果是doc的文件,優先轉換成docx,待解析完之后再移除掉。
if filename.endswith(".doc"): subprocess.call("textutil -convert docx {0}".format(fullname),shell=True) fullname=fullname[:-4]+".docx" sheetModel= etl_word_files(fullname)#解析文本邏輯 subprocess.call("rm {0}".format(fullname),shell=True) #移除轉換的文件解析word文件
接下來就是解析文件了,通過docx模塊很容易實現,具體的解析邏輯就不貼了,就是遍歷每一行,根據一些關鍵字,符號來截取數據(每個簡歷格式基本上差不多的)
doc = docx.Document(fullname) for para in doc.paragraphs: print(para.text) ...具體解析邏輯...填充excel
解析完的數據就可以直接填充excel了:
workbook = xlsxwriter.Workbook("report_list.xlsx") worksheet = workbook.add_worksheet("list") worksheet.write(0,0, "序號") worksheet.write(0,1, "姓名") worksheet.write(0,2, "性別") worksheet.write(0,3, "年齡") worksheet.write(0,4, "籍貫") worksheet.write(0,5, "目前所在地") worksheet.write(0,6, "學歷") worksheet.write(0,7, "學校") worksheet.write(0,8, "公司") worksheet.write(0,9, "職位") worksheet.write(0,10, "文檔鏈接")
這里主要說下文檔鏈接的填充,由于是要給其他人的,只要保證附件和excel在同一個文件夾下,采用相對路徑的方式來實現,可以使用Excel的函數HYPERLINK:
worksheet.write(index,10, "=HYPERLINK("./"+filename+"","附件")")問題點
到這里,基本上可以實現相應的功能了,但不是很完美,主要是word中的格式不標準,沒有很好的方式去準確獲取到我要的數據,但主要的姓名學校之類的大多數都抓到了,也算減輕點任務啦。
總結利用python還是減少了一定的重復勞動,但面對一些不標準的東東貌似還沒有很好的方式。
雖然可以增加邏輯來兼容這些不標準,但顯然這個付出和產出就有點不成正比了。
利用好手上的工具去提高效率才是真的,至于是傻瓜式的重復工作,還是通過代碼來減少重復勞動,就看你自己怎么看啦。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41707.html
摘要:自動發送郵件我們把報表做出來以后一般都是需要發給別人查看,對于一些每天需要發的報表或者是需要一次發送多份的報表,這個時候可以考慮借助來自動發送郵件。一份郵件的組成下圖是中發送一份郵件的界面,主要包含發件人收件人抄送人主題正文附件這幾部分。 ...
摘要:參數分別表示主機和端口。注意也可以在參數中指定端口號如,這樣就沒必要給出參數。當需要發送附件的時候使用的就是這個類的一個子類。主要用來發送圖片普通文本郵件文本對象,其中是郵件內容,郵件類型,可以是普通文本郵件,郵件編碼,可以是等等。 python發送郵件 準備 python中發送郵件主要用的是smtplib和email兩個模塊,下面主要對這兩個模塊進行講解 在講解之前需要準備至少兩個...
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:讓你收獲滿滿碼個蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術文章,為了讓大家在家也能好好學習,特此花了幾個小時整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個蛋從2017年02月20...
閱讀 3454·2021-11-22 12:00
閱讀 671·2019-08-29 13:24
閱讀 2905·2019-08-29 11:31
閱讀 2587·2019-08-26 14:00
閱讀 3185·2019-08-26 11:42
閱讀 2476·2019-08-23 18:31
閱讀 798·2019-08-23 18:27
閱讀 2844·2019-08-23 16:58