自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python辦公自動化之從Word到Excel

開發(fā) 后端 自動化
大家好,今天有一個公務員的小伙伴委托我給他幫個忙,大概是有這樣一份Word(由于涉及文件私密所以文中的具體內(nèi)容已做修改)

 [[322971]]

大家好,今天有一個公務員的小伙伴委托我給他幫個忙,大概是有這樣一份Word(由于涉及文件私密所以文中的具體內(nèi)容已做修改)

一共有近2600條類似格式的表格細欄,每個欄目包括的信息有:

  • 日期
  • 發(fā)文單位
  • 文號
  • 標題
  • 簽收欄

需要提取其中加粗的這三項內(nèi)容到Excel表格中存儲,表格樣式如下:

也就是需要將收文時間、文件標題、文號填到指定位置,同時需要將時間修改為標準格式,如果是完全手動復制和修改時間,依照一個條目10s的時間計算,一分鐘可以完成6條,那么最快也需要:

而這類格式規(guī)整的文件整理非常適合用Python來執(zhí)行,好的那么接下來請Python出場,必要的信息我在代碼中以注釋信息呈現(xiàn)。

首先使用Python將Word文件導入

  1. # 導入需要的庫docx 
  2. from docx import Document 
  3.  
  4. # 指定文件存放的路徑 
  5. path = r'C:\Users\word.docx'  
  6.  
  7. # 讀取文件 
  8. document = Document(path) 
  9.  
  10. # 讀取word中的所有表格 
  11. tables = document.tables 

再把問題逐個劃分,首先嘗試獲取第一張表第一個文件條目的三個所需信息

  1. # 獲取第一張表 
  2. table0 = tables[0] 

仔細觀察可以發(fā)現(xiàn)一個文件條目占據(jù)了3行,所以對表格全部行循環(huán)迭代時可以設步長為3

注意觀察表格,按照row和cell把所需內(nèi)容解析清楚

  1. # 在全局放一個變量用來計數(shù)填序號 
  2. n = 0 
  3. for i in range(0, len(table0.rows) + 1, 3): 
  4.     # 日期 
  5.     date = table0.cell(i, 1).text 
  6.     # 標題 
  7.     title = table0.cell(i + 1, 1).text.strip() 
  8.     # 文號 
  9.     dfn = tables[j].cell(i, 3).text.strip() 
  10.     print(n, date, tite, dfn) 

接下來需要解決的是,時間我們獲取的是 2/1 這種 日/月的形式。我們需要轉(zhuǎn)化成 YYYY-MM-DD格式,而這利用到datetime包的strptime和strftime函數(shù):

  • strptime: 解析字符串中蘊含的時間
  • strftime: 轉(zhuǎn)化成所需的時間格式
  1. import datetime 
  2.  
  3. n = 0 
  4. for i in range(0, len(table0.rows) + 1, 3): 
  5.     # 日期 
  6.     date = table0.cell(i, 1).text 
  7.     # 有的條目時間是空的,這里不做過多判別 
  8.     if '/' in date
  9.         date = datetime.datetime.strptime(date'%d/%m').strftime('2020-%m-%d'
  10.     else
  11.         date = '-' 
  12.     # 標題 
  13.     title = table0.cell(i + 1, 1).text.strip() 
  14.     # 文號 
  15.     dfn = tables[j].cell(i, 3).text.strip() 
  16.     print(n, date, tite, dfn) 

這樣一張表的內(nèi)容解析就完成了,注意這里用的是table[0]即第一張表,遍歷所有的表加一個嵌套循環(huán)就可以,另外也可以捕獲異常增加程序靈活性

  1. n = 0 
  2. for j in range(len(tables)): 
  3.     for i in range(0, len(tables[j].rows)+1, 3): 
  4.         try: 
  5.             # 日期 
  6.             date = tables[j].cell(i, 1).text 
  7.             if '/' in date
  8.                 date = datetime.datetime.strptime(date'%d/%m').strftime('2020-%m-%d'
  9.             else
  10.                 date = '-' 
  11.             # 標題 
  12.             title = tables[j].cell(i + 1, 1).text.strip() 
  13.             # 文號 
  14.             dfn = tables[j].cell(i, 3).text.strip() 
  15.             n += 1 
  16.             print(n, date, title, dfn) 
  17.         except Exception as error: 
  18.             # 捕獲異常,也可以用log寫到日志里方便查看和管理 
  19.             print(error) 
  20.             continue 

信息解析和獲取完成就可以導出了,用到的包是openpyxl

  1. from openpyxl import Workbook 
  2.  
  3. # 實例化 
  4. wb = Workbook() 
  5. # 獲取當前sheet 
  6. sheet = wb.active 
  7. # 設立表頭 
  8. header = ['序號''收文時間''辦文編號''文件標題''文號''備注'
  9. sheet.append(header) 

在最內(nèi)層解析循環(huán)的末尾加上如下代碼即可

  1. row = [n, date' ', title, dfn, ' '
  2. sheet.append(row) 

線程的最后記得保存

  1. wb.save(r'C:\Users\20200420.xlsx'

運行時間在10分鐘左右,大概離開了一會程序就執(zhí)行結(jié)束了

最后附上完整代碼,代碼很簡單,理清思路最重要

  1. from docx import Document 
  2. import datetime 
  3. from openpyxl import Workbook 
  4.  
  5. wb = Workbook() 
  6. sheet = wb.active 
  7. header = ['序號''收文時間''辦文編號''文件標題''文號''備注'
  8. sheet.append(header) 
  9.  
  10.  
  11. path = r'C:\Users\word.docx' 
  12. document = Document(path) 
  13. tables = document.tables 
  14.  
  15. n = 0 
  16. for j in range(len(tables)): 
  17.     for i in range(0, len(tables[j].rows)+1, 3): 
  18.         try: 
  19.             # 日期 
  20.             date = tables[j].cell(i, 1).text 
  21.             if '/' in date
  22.                 date = datetime.datetime.strptime(date'%d/%m').strftime('2020-%m-%d'
  23.             else
  24.                 date = '-' 
  25.             # 標題 
  26.             title = tables[j].cell(i + 1, 1).text.strip() 
  27.             # 文號 
  28.             dfn = tables[j].cell(i, 3).text.strip() 
  29.             n += 1 
  30.             print(n, date, title, dfn) 
  31.             row = [n, date' ', title, dfn, ' '
  32.             sheet.append(row) 
  33.         except Exception as error: 
  34.             # 捕獲異常,也可以用log寫到日志里方便查看和管理 
  35.             print(error) 
  36.             continue 
  37.  
  38. wb.save(r'C:\Users\20200420.xlsx'

 

責任編輯:華軒 來源: 早起Python
相關(guān)推薦

2020-11-05 12:56:19

Python辦公自動化

2022-06-13 09:12:04

PythonPDF代碼

2022-03-21 10:09:08

PythonExcel郵件

2021-12-28 09:24:49

Python郵件Word

2021-04-17 23:10:59

Python微軟Word

2021-07-09 07:24:47

Python自動化辦公

2022-08-04 13:27:35

Pythonopenpyxl

2023-05-15 08:01:32

Python辦公自動化

2021-04-22 15:46:42

物聯(lián)網(wǎng)智能辦公IoT

2024-05-29 11:16:33

PythonExcel

2009-02-11 09:49:00

網(wǎng)絡維護網(wǎng)絡管理

2009-10-26 21:26:37

網(wǎng)絡運維辦公自動化

2022-06-05 21:09:47

Python辦公自動化

2011-08-03 17:37:05

2013-01-10 15:21:09

三元食品辦公自動化IBM

2013-12-09 18:12:02

華為PTN電力配網(wǎng)

2025-04-23 08:15:00

2021-04-23 22:44:57

Python開發(fā)辦公自動化

2023-10-18 13:57:17

2023-11-20 22:07:51

PythonPDF
點贊
收藏

51CTO技術(shù)棧公眾號