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)
真的太强了!
代码运行之后可以得到预期的结果,如下图所示:
后来【狂吃山楂片】基于此代码,来了个简易版的,代码如下所示:
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)
这技术真是到家了,出神入化的。
代码运行之后,也完全可以实现这个需求。
后来【瑜亮老师】还给了一个代码,也非常赞,如下所示:
data = [paragraph.text for paragraph in all_paragraphs if'√'in paragraph.text or '×'in paragraph.text] # 合并为一个长字符串,然后替换删除所有的空格 data = ''.join(data).replace(' ', '') # 使用re正则表达式提取出所有含有题号的答案 res = re.findall(r'\d+\.[√×]', data, re.S) df = pd.DataFrame(res) df.to_excel('test9-13.xlsx', index=False, header=None)
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')