首頁 > 後端開發 > Python教學 > 如何用python整理附件

如何用python整理附件

不言
發布: 2018-06-04 17:42:50
原創
1468 人瀏覽過

這篇文章為大家整理了關於如何用python整理附件的相關知識點,學習python的朋友可以跟著測試下。

目前我的資料夾中有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還是減少了一定的重複勞動,但面對一些不標準的東東似乎還沒有很好的方式。

雖然可以增加邏輯來相容這些不標準,​​但顯然這個付出和產出就有點不成正比了。

利用好手上的工具去提高效率才是真的,至於是傻瓜式的重複工作,還是透過程式碼來減少重複勞動,就看你自己怎麼看啦。

相關推薦;

使用Python快速建置HTTP服務與檔案共用服務

############使用Python監控檔案內容變更程式碼##################################

以上是如何用python整理附件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板