利用Python好好的整理你的附件

目前個人文件夾中有500多份簡歷,若是我想知道一些信息,好比學校,學歷之類的,我須要打開每一份word去查看,太耗時間了。這個時候python須要出馬了。

目標

目前相似截圖中的word有600+,想簡單的進行整理:python

截圖1

能夠整理出一份excel用於導航(相似目錄),能夠經過excel來快速定位到所要的附件,以下圖效果:shell

截圖2

具體實現

有了目標,就具體說說如何實現的,整理思路仍是比較簡單的,就是遍歷全部的word文件,將word中關鍵的信息獲取到並保存到excel中。函數

這裏列下主要用到的模塊:工具

import xlsxwriter
import subprocess
import os
import docx
import sys
import re

xlsxwriter主要用來操做excel,xlsxwriter只能用來寫,效率上比xlwt要高,數據量很少,用xlwt也ok。google

subprocess主要用來調用命令行,由於docx模塊沒法解析doc的word文件,因此在解析前將doc的文件轉換成docx文件。spa

os主要用於遍歷文件夾獲取文件。命令行

docx主要用來解析word文檔。excel

規範下文件名

首先咱們先規範下文件名稱,由於在使用subprocess.call調用命令時,空格,特殊符號之類的沒辦法轉義致使報錯,因此乾脆在以前就清理掉這個潛在問題。code

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))

遍歷文件

以後咱們就能夠開始正題,遍歷每一個文件進行解析:orm

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仍是減小了必定的重複勞動,但面對一些不標準的東東貌似尚未很好的方式。

雖然能夠增長邏輯來兼容這些不標準,但顯然這個付出和產出就有點不成正比了。

利用好手上的工具去提升效率纔是真的,至因而傻瓜式的重複工做,仍是經過代碼來減小重複勞動,就看你本身怎麼看啦。

相關文章
相關標籤/搜索