美文网首页
python从word中读取规则数据存到excel中

python从word中读取规则数据存到excel中

作者: carebon | 来源:发表于2021-07-03 21:05 被阅读0次

    首先思路是用正则表达式把有规则的word字符读取到python中,list或者数组之类的,然后再存到Excel中。因为是有规则的参考文献类的word所以难度不大,但是还是搞了一下午,最后只是凑合用,还有好多bug没有解。。。

    import numpy as np
    from docx import Document
    import pandas as pd
    from collections import OrderedDict
    import csv
    import re
    doc = Document("CV1819last.docx")
    for i, paragraph in enumerate(doc.paragraphs[:55]):
        print(i, paragraph.text)
    

    word中文件的格式如图,类似一个标准的参考文献格式,而我的需求是按照作者,论文名,期刊名,时间,期卷号存到一个excel中。
    1.首先,word的python读取每次读的是块。
    2.通过对格式的分析,确定了利用,来分割字符串,然后再用.来分割上次分割的第一个字符串,这对于期刊论文很适用,对于会议论文的可用性就弱很多。
    3.数据的传递使用的是list而不是字典,如果有机会的话,可能字典更好用,只是时间有限。

    完整代码如下
    import numpy as np
    from docx import Document
    import pandas as pd
    from collections import OrderedDict
    import csv
    import re
    doc = Document("CV1819last.docx")
    #for i, paragraph in enumerate(doc.paragraphs[:55]):
        #print(i, paragraph.text)
    
    
    # 保存最终的结构化数据
    question_type2data = OrderedDict()
    sum = np.zeros(shape=(15,8))
    i = 0
    Qiegelinesum1=[]
    Qiegelinesum2=[]
    # 从word文档开始遍历数据
    for paragraph in doc.paragraphs[:67]:
        #  将全角字符转半角字符,并给括号之间调整为中间一个空格
        line = paragraph.text.replace(
            "(", "(").replace(")", ")").replace(".", ".").replace(",", ",")
        # 对于空白行就直接跳过
        if not line:
            continue
        Qiegeline = []
        #Qiegeline = re.split('\.|,', line)#同时切割.和,隔开的字符串
        Qiegeline = line.rsplit(',', 2)#反向两个,隔开的
        Qiegeline1 = Qiegeline[0].split('.', 2)
        #取Qie1 list的第一个字符串,用.隔开
        Qiegeline.remove(Qiegeline[0])
        Qiegelinesum =Qiegeline1+Qiegeline
        Qiegelinesum1.append(Qiegelinesum)
        Qiegelinesum2 = Qiegelinesum1+Qiegelinesum
        #sum[i][:]=Qiegelinesum1[[i]]+Qiegelinesum[[i]]
    #将list保存为csv文件
        #Qiegelinesum = list(map(list, zip(*Qiegelinesum)))
    with open(r"friendInfo1.csv", 'w+', newline='') as file:#每次需要debug运行才可,在这个位置停一下再继续
        writer = csv.writer(file)
        writer.writerows(Qiegelinesum1)
    

    切割字符串

    str.split(sep, [,max])#,sep可以指定切割的符号,max可以指定切割的次数(次数不常用)
    

    python自带的split
    并且支持反向切割,str.rsplit()语法和正向一致
    2.re库带的split,自认为的亮点是可以支持吧不同的符号作为切割位点,例如,

    re.split('\.|,', line)#同时切割.和,隔开的字符串
    

    正则表达式

    正则表达式用反斜杠字符 ('') 表示特殊形式,或是允许在使用特殊字符时,不引发它们的特殊含义。

    re.match与re.search的区别
    re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配

    检索和替换

    Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。
    语法:

    re.sub(pattern, repl, string, count=0, flags=0)
    

    官方详细正则:https://docs.python.org/zh-cn/3/library/re.html

    相关文章

      网友评论

          本文标题:python从word中读取规则数据存到excel中

          本文链接:https://www.haomeiwen.com/subject/xadpultx.html