本python中使用了模块:
re:用于写正则
python-docx:用于读取worl中的数据
openpyxl:用于将内容写入excel
-----------------------------------------前言-----------------------------------------------
此代码仅可以使用,复杂度较高。若有更好修改可私信,谢。
代码比较简单,有注释,不过多解释。看代码即可。有问题或错误请私聊。
目前仅支持两种格式。
--------------------------------------代码开始--------------------------------------
import docx
import openpyxl
import re
#题干:A ,选项A:B,选项B:C,选项C:D,选项D:E
#支持以下类型数据()中内容为备注
#1,这是文件的主体 (以数字开头1-9)
#A,这是选项A (A选项重要,不要正好匹配A...B...C...D...)
#B这是选项A (匹配的是以A-D开头)
# C这是选项A (前面允许有空格)
#D这是选项B
#2,这是文件的主体
#A,选项A B,选项B C选项C D选项D (空格切割选项注意内容不要有其他)
count = 0 #主计数
count1 = 0
count2 = 0
count3 = 0
count4 = 0
count5 = 0 #计数器
in_world_path=r"/home/user1/桌面/任务三.docx"
content=docx.Document(in_world_path) #得到内容
wb=openpyxl.Workbook()
ws=wb.active
def first_num(in_text):
stat = 0 #状态码
pattern = r"^ *[0-9].*" #正则表达式
get_value = re.findall(pattern,in_text)
if get_value != []:
global count5 #使用全局的计数器
count5 += 1 #自增
get_key = str("A") + str(count5) #拼接键
ws[get_key] = in_text
stat = 1 #写入数据后将转态码置1
return stat
#返回状态码1写入0跳过
def first_B(in_text):
stat = 0 #状态码
pattern = r"^ *B.*" #正则表达式
get_value = re.findall(pattern,in_text)
if get_value != []:
global count1 #使用全局的计数器
count1 += 1 #自增
get_key = str("C") + str(count1) #拼接键
ws[get_key] = in_text
stat = 1 #写入数据后将转态码置1
return stat
#返回状态码1写入0跳过
def first_C(in_text):
stat = 0 #状态码
pattern = r"^ *C.*" #正则表达式
get_value = re.findall(pattern,in_text)
if get_value != []:
global count2 #使用全局的计数器
count2 += 1 #自增
get_key = str("D") + str(count2) #拼接键
ws[get_key] = in_text
stat = 1 #写入数据后将转态码置1
return stat
#返回状态码1写入0跳过
def first_D(in_text):
stat = 0 #状态码
pattern = r"^ *D.*" #正则表达式
get_value = re.findall(pattern,in_text)
if get_value != []:
global count3 #使用全局的计数器
count3 += 1 #自增
get_key = str("E") + str(count3) #拼接键
ws[get_key] = in_text
stat = 1 #写入数据后将转态码置1
#print (stat)
return stat
#返回状态码1写入0跳过
def first_A(in_text):
#ex=['1','2','3','4']
stat = 0
pattern = r"^ *A.*"
get_value = re.findall(pattern,in_text) #匹配第一行是否为A开头(不包含空格)
if get_value != []:
global count4
count4 += 1
pattern = r" *^A.*B.*C.*D.*"
rest = re.findall(pattern,in_text) #判断四个选项是否在一行
if rest !=[]:
#ex=re.split(r"[A-D]",star) #[A-D]其中一个字母开始分割
ex=re.split(r"\s+",in_text) #以空格切割
num=0 #计数器,统计返回的元素的个数
for i in ex: #计数开始
num = num+1
if num != 4: #如单行不符合条件则返回列表和对应元素数量
print (num)
print (ex)
get_key= str("B")+str(count4) #分开处理每行数据 ['12313', '12323123', '2132313123', '123123123']
ws[get_key]=ex[0] # 交给原定的方法去处理
first_B(ex[1])
first_C(ex[2])
first_D(ex[3])
if rest == []:
get_key= str("B")+str(count4)
ws[get_key]=in_text #正常写入
return stat
def main(name):
for i in content.paragraphs:
global count #主要的计数器记录行
count = count +1
tex=i.text
#print (tex)
w1 = first_num(tex)
if w1 == 0 :
w2 = first_A(tex)
if w2 == 0:
w3 = first_B(tex)
if w3 == 0:
w4 = first_C(tex)
if w4 == 0:
w5 = first_D(tex)
if w5 == 0:
#print ("非常规数据"+tex) #不符合预期
pass
wb.save(name)
print (count)
if __name__ == "__main__":
out_excel_path="ceshi.xlsx"
main(name=out_excel_path)