怎么從休學(xué)證明中取出休學(xué)原因(python自動化辦公,涉及word和excel)
本代碼偏向處理高校教務(wù)處的工作
休學(xué)或請假模板如下:
休學(xué)證明(此聯(lián)存教務(wù)辦)
編號:休202323
計算機(jī)系23級計算機(jī)科學(xué)與技術(shù)本科專業(yè)學(xué)生5-StarrySky,不男不女,因自身原因,從2023年9月至2027年9
月休學(xué)。復(fù)學(xué)時持復(fù)學(xué)申請和休學(xué)證明及休學(xué)期間所在單位開具的無違法亂紀(jì)行為證明辦理復(fù)學(xué)手續(xù)。復(fù)學(xué)
后編入2027級同專業(yè)就讀。若逾期兩周不辦理復(fù)學(xué)手續(xù),將做自動退學(xué)處理。
CSDN大學(xué)教務(wù)辦
2023年11月12日
需求說明:
1.首先從excel中取出需要休學(xué)的姓名
2.然后利用得到姓名去word文件進(jìn)行匹配
3.最后通過觀察發(fā)現(xiàn),休學(xué)原因,在'因'和','之間,所以我們這樣去取我們想要的數(shù)據(jù)
代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-734410.html
import re
# 從表格文件中提取姓名數(shù)據(jù)
table_data = pd.read_excel("休學(xué)名單.xls")
# names = table_data["XM"]
# 從表格文件中提取姓名數(shù)據(jù)
names = table_data["XM"]
# 提取 Word 文檔中的文本
text = docx2txt.process("休學(xué)證明.docx")
# 創(chuàng)建一個字典來存儲姓名和對應(yīng)的請假原因
name_reason_dict = {}
for name in names:
found = False
reason = None
# 在提取的文本中搜索姓名
if name in text:
# 查找姓名出現(xiàn)的最后一次位置
name_position = max([m.start() for m in re.finditer(name, text)])
# 查找 "因" 和截取到 "," 之前的文本
match = re.search(r'因(.*?),', text[name_position:])
if match:
reason = match.group(1)
found = True
if found:
# 使用姓名作為鍵,保存最后一個匹配到的原因
name_reason_dict[name] = reason
# 打印姓名和對應(yīng)的請假原因
for name, reason in name_reason_dict.items():
print(f"姓名: {name}, 請假原因: {reason}")
df = DataFrame(list(name_reason_dict.items()), columns=['XM', 'XXYY'])
df.to_excel("休學(xué)證明.xlsx")
重要知識點(diǎn)補(bǔ)充文章來源地址http://www.zghlxwxcb.cn/news/detail-734410.html
docx2txt:
將docx文件轉(zhuǎn)換為txt格式的模塊
能夠直接讀取docx文檔并將其中的文本部分剝離出來的簡單工具
re.finditer:
和 findall 類似,在字符串中找到正則表達(dá)式所匹配的所有子串,并把它們作為一個迭代器返回。
參數(shù) 描述
pattern 匹配的正則表達(dá)式
string 要匹配的字符串。
flags 標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等。參見:正則表達(dá)式修飾符 - 可選標(biāo)志
* 字符匹配
實(shí)例 描述
python 匹配 "python" 參考網(wǎng)址:https://www.runoob.com/python/python-reg-expressions.html
max([m.start() for m in re.finditer(name, text)])
這行代碼是使用 Python 的正則表達(dá)式模塊(re)來在文本字符串 text 中查找所有匹配 name 的位置,并返回其中最
大的位置。
具體解釋如下:
re.finditer(name, text):這部分使用 re.finditer() 函數(shù)來查找在 text 中所有匹配 name 的位置。finditer() 返回一個迭
代器,迭代器的每個元素是一個包含匹配的相關(guān)信息的 Match 對象。
[m.start() for m in ...]:這部分是一個列表推導(dǎo)式,它遍歷 re.finditer() 返回的 Match 對象列表,對于每個 Match 對
象 m,取其匹配的開始位置 m.start()。
max([...]):最后,max() 函數(shù)用來從位置列表中找到最大的位置。
match = re.search(r'因(.*?),', text[name_position:])
這行代碼使用正則表達(dá)式來搜索文本中以指定字符串 "因" 開頭并以逗號 "," 結(jié)尾的文本段。
具體解釋如下:
re.search(pattern, text):這部分使用 re.search() 函數(shù)來在文本字符串 text 中搜索與正則表達(dá)式 pattern 匹配的部
分。pattern 是正則表達(dá)式模式,text 是要搜索的文本。
r'因(.*?),':這是正則表達(dá)式模式。它的含義是:
因:匹配字面字符串 "因"。
(.*?):這是一個非貪婪捕獲組,它會匹配任意字符(.)零次或多次(*),使匹配最短(非貪婪)。
,:匹配字面字符串 ","。
text[name_position:]:這部分是對 text 字符串的切片操作,從 name_position 位置開始提取子字符串。
list(name_reason_dict.items()): 這部分將字典 name_reason_dict 中的鍵值對轉(zhuǎn)換為一個列表,其中每個元素是一個
元組,元組的第一個元素是姓名 'XM',第二個元素是請假原因 'XXYY'。這個列表看起來像下面這樣
[('姓名1', '請假原因1'), ('姓名2', '請假原因2'), ('姓名3', '請假原因3'), ...]
columns=['XM', 'XXYY']: 這是在創(chuàng)建 DataFrame 時指定的列名。DataFrame 的第一列將命名為 'XM',第二列將命
名為 'XXYY',這與字典中的鍵對應(yīng)。所以,在 DataFrame 中,第一列將包含姓名,第二列將包含請假原因。
match 是一個 Python 正則表達(dá)式匹配對象,它包含了與正則表達(dá)式匹配的文本的詳細(xì)信息。
reason = match.group(1):用于從正則表達(dá)式匹配中獲取文本中的具體部分。在這個特定的情況下,match 對象表
示一個成功的正則表達(dá)式匹配,group(1) 用于提取匹配中的第一個捕獲組(通常由括號包圍的部分)。在你的情況
下,正則表達(dá)式是 '因(.*?),',其中 (.*?) 表示一個捕獲組,它將匹配 "因" 和 "," 之間的任何文本。
參考鏈接:https://blog.csdn.net/m0_37360684/article/details/84140403
到了這里,關(guān)于怎么從休學(xué)證明中取出休學(xué)原因(python自動化辦公,涉及word和excel)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!