盤點一個Python自動化辦公的實戰(zhàn)案例
回復(fù)“資源”即可獲贈Python學(xué)習(xí)資料
大家好,我是皮皮。
一、前言
前幾天在Python鉆石交流群【Hxy任我肥】問了一個Python自動化辦公的問題,提問截圖如下:

想要的效果是下圖這樣的:

準(zhǔn)確來說,這個都不算是問題了,而是一個實實在在的需求。
二、實現(xiàn)過程
這里【Jason】給了一個可行的思路,如下:

后來【瑜亮老師】給了一個具體的代碼,如下所示:
import re
from docx import Document
import pandas as pd
document = Document("判斷(括號處理)(1).docx")
all_paragraphs = document.paragraphs
data = [paragraph.text for paragraph in all_paragraphs if '√' in paragraph.text or '×' in paragraph.text]
data = ''.join(data)
res = re.findall('[√×]', data, re.S)
res = [f'{k + 1}.{v}' for k, v in enumerate(res)]
df = pd.DataFrame(res)
df.to_excel('test9-13.xlsx', index=False, header=None)
真的太強(qiáng)了!

代碼運行之后可以得到預(yù)期的結(jié)果,如下圖所示:

后來【狂吃山楂片】基于此代碼,來了個簡易版的,代碼如下所示:
import re
from docx import Document
import pandas as pd
document = Document(r"判斷(括號處理)(1).docx")
text = document.part.blob.decode('utf-8')
text = re.sub(r'<.*?>', '', text)
text = re.sub(r'\.\s+', r'.', text)
df = pd.DataFrame(re.findall(r'\d+\.[√×]', text))
df.to_excel('result.xlsx', header=None, index=False)
這技術(shù)真是到家了,出神入化的。

代碼運行之后,也完全可以實現(xiàn)這個需求。

后來【瑜亮老師】還給了一個代碼,也非常贊,如下所示:
data = [paragraph.text for paragraph in all_paragraphs if '√' in paragraph.text or '×' in paragraph.text]
# 合并為一個長字符串,然后替換刪除所有的空格
data = ''.join(data).replace(' ', '')
# 使用re正則表達(dá)式提取出所有含有題號的答案
res = re.findall(r'\d+\.[√×]', data, re.S)
df = pd.DataFrame(res)
df.to_excel('test9-13.xlsx', index=False, header=None)
真讓人嘆為觀止!把多余的空格都替換刪除,可以防止答案中含有空格而導(dǎo)致不能被正則r'\d+\.[√×]'匹配到,這樣就一步到位了。不用再用列表推導(dǎo)式構(gòu)造答案。

你以為這就完事了?
后來【甯同學(xué)】使用openpyxl庫也搞定了,代碼如下圖所示:
import re
import docx
import openpyxl
def str_work(string:str):
return [*filter(None,re.split('\.',re.sub('\d+','',string.replace(' ', '').replace('\n', ''))))]
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['題目','答案'])
doc = docx.Document(r'C:\Users\Administrator\Desktop\判斷(括號處理).docx')
doc_text = '\n'.join(( i.text for i in doc.paragraphs[3:]))
doc_list = doc_text.split('\n一、判斷題')
title_row = [i.strip() for i in doc_list[0].split('\n') if i.strip().split('、')!=['']]
answer_row = [i for i in str_work(doc_list[1])]
for i in zip(title_row,answer_row):
ws.append(list(i))
wb.save('1.xlsx')
運行之后得到的結(jié)果如下圖所示:

三、總結(jié)
大家好,我是皮皮。這篇文章主要盤點了一個Python自動化辦公的問題,文中針對該問題,給出了具體的解析和代碼實現(xiàn),幫助粉絲順利解決了問題。
最后感謝粉絲【Hxy任我肥】提問,感謝【Jason】、【瑜亮老師】、【狂吃山楂片】、【甯同學(xué)】給出的思路和代碼解析,感謝【dcpeng】、【產(chǎn)后修復(fù)】、【此類生物】、【余克富】等人參與學(xué)習(xí)交流。
大家在學(xué)習(xí)過程中如果有遇到問題,歡迎隨時聯(lián)系我解決(我的微信:pdcfighting),應(yīng)粉絲要求,我創(chuàng)建了一些高質(zhì)量的Python付費學(xué)習(xí)交流群,歡迎大家加入我的Python學(xué)習(xí)交流群!

有遇到任何問題,歡迎加我好友,我拉你進(jìn)Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。
------------------- End -------------------
往期精彩文章推薦:

歡迎大家點贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請在后臺回復(fù)【入群】
萬水千山總是情,點個【在看】行不行
