• python学习笔记之word文档提取


    """
    # !/usr/bin/env python
    # -*- coding:utf-8 -*-
    # @Author  : 史沐凡
    # @file    :  pdf____张坤_文档转换工具.py
    # @Time    : 2022/7/24 22:21
    # @Function:
    """
    # 读取docx中的文本代码示例
    import glob
    import os
    import re
    from openpyxl import Workbook  # 写入的时候用
    import pdfplumber
    
    
    def getfields(filepath):
        '''
        直接读取pdf,获取所需要的字段
        患者姓名	标识号	出生日期	性别	保险集团	胶囊标识号	操作日期	转诊医生	登记者	预约者
        	转诊原因	体重	身高	腰围	体型	通过胃部的时间	通过小肠的时间	操作信息与发现	摘要与建议
        :return:list
        '''
        print(filepath)
        患者姓名 = ""
        标识号 = ""
        出生日期 = ""
        性别 = ""
        保险集团 = ""
        胶囊标识号 = ""
        操作日期 = ""
        转诊医生 = ""
        登记者 = ""
        预约者 = ""
        转诊原因 = ""
        体重 = ""
        身高 = ""
        腰围 = ""
        体型 = ""
        通过胃部的时间 = ""
        通过小肠的时间 = ""
        操作信息与发现 = ""
        摘要 = ""
        建议 = ""
        fields = ['患者姓名',
                  '标识号',
                  '出生日期',
                  '性别',
                  '保险集团',
                  '胶囊标识号',
                  '操作日期',
                  '转诊医生',
                  '登记者',
                  '预约者',
                  '转诊原因',
                  '体重',
                  '身高',
                  '腰围',
                  '体型',
                  '通过胃部的时间',
                  '通过小肠的时间',
                  '操作信息与发现',
                  '摘要',
                  '建议']
        nr = ""
        with pdfplumber.open(filepath) as pdf:
            for page in pdf.pages:  # 遍历所有页码
                text = page.extract_text()  # 提取文本
                nr=nr+text
        nr = nr.strip()
        print(nr)
        res = re.search(r"患者姓名 (.*)", nr, 0)
        if res: 患者姓名 = res.group(1).strip()
        res = re.search(r"标识号 (.*)", nr, 0)
        if res: 标识号 = res.group(1).strip()
        res = re.search(r"出生日期 (.*)", nr, 0)
        if res: 出生日期 = res.group(1).strip()
        res = re.search(r"性别 (.*)性", nr, 0)
        if res: 性别 = res.group(1).strip()
        res = re.search(r"保险集团 (.*)", nr, 0)
        if res: 保险集团 = res.group(1).strip()
        res = re.search(r"胶囊标识号 (.*)", nr, 0)
        if res: 胶囊标识号 = res.group(1).strip()
        res = re.search(r"操作日期 (.*)", nr, 0)
        if res: 操作日期 = res.group(1).strip()
        res = re.search(r"转诊医生 (.*)", nr, 0)
        if res: 转诊医生 = res.group(1).strip()
        res = re.search(r"登记者 (.*)", nr, 0)
        if res: 登记者 = res.group(1).strip()
        res = re.search(r"预约者 (.*)", nr, 0)
        if res: 预约者 = res.group(1).strip()
        res = re.search(r"转诊原因(.*)患者数据", nr, re.DOTALL)
        if res:
            转诊原因 = res.group(1).strip()
        res = re.search(r"体重 ?:(\d*) ?kg", nr, 0)
        if res: 体重 = res.group(1).strip()
        res = re.search(r"身高 ?:(\d*) ?cm", nr, 0)
        if res: 身高 = res.group(1).strip()
        res = re.search(r"腰围 ?:(\d*) ?cm", nr, 0)
        if res: 腰围 = res.group(1).strip()
        res = re.search(r"体型 ?:(.{1,3}),", nr, 0)
        if res: 体型 = res.group(1).strip().strip()
        res = re.search(r"通过胃部的时间 ?:(.*),", nr, 0)
        if res: 通过胃部的时间 = res.group(1).strip()
        res = re.search(r"通过小肠的时间 ?:(.*)", nr, 0)
        if res: 通过小肠的时间 = res.group(1).strip()
        res = re.search(r"操作信息与发现(.*)摘要与建议", nr, re.DOTALL)
        if res:
            操作信息与发现 = res.group(1).strip()
            操作信息与发现 = 操作信息与发现.replace(" ", "")
            ls = 操作信息与发现.split("\n")
            操作信息与发现 = ";".join(ls).strip()
        res = re.search(r"摘要与建议(.*)建议:", nr, re.DOTALL)
        if res:
            摘要 = res.group(1).strip()
            摘要 = 摘要.replace(" ", "")
            ls = 摘要.split("\n")
            摘要 = ";".join(ls).strip()
        res = re.search(r"建议:(.*)签名", nr, re.DOTALL)
        if res:
            建议 = res.group(1).strip()
            建议 = 建议.replace(" ", "")
            ls = 建议.split("\n")
            建议 = ";".join(ls).strip()
        print("*" * 88)
        ls = [患者姓名, 标识号, 出生日期, 性别,
              保险集团, 胶囊标识号, 操作日期, 转诊医生,
              登记者, 预约者, 转诊原因, 体重,
              身高, 腰围, 体型, 通过胃部的时间,
              通过小肠的时间, 操作信息与发现, 摘要,建议]
        print(ls)
        if (all(ls)):
            return ls
        else:
            return ls
    
    
    if __name__ == '__main__':
        fields = ['患者姓名', '标识号', '出生日期', '性别', '保险集团', '胶囊标识号', '操作日期', '转诊医生', '登记者', '预约者', '转诊原因',
                  '体重', '身高', '腰围',
                  '体型', '通过胃部的时间', '通过小肠的时间', '操作信息与发现', '摘要','建议']
        print(fields)
        root = os.getcwd()
        ls = glob.glob("pdf报告\*.pdf")
        big_ls = []
        for i in ls:
            i=os.path.join(os.getcwd(),i)
            ls = getfields(i)
            big_ls.append(ls)
        for i in big_ls: print(i)
        wb = Workbook()
        ws = wb.active
        ws.append(fields)
        for i in big_ls:
            ws.append(i)
        wb.save(r'pdf报告/pdf转换表格.xlsx')
        exit(0)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
  • 相关阅读:
    Docker数据集与自定义镜像:构建高效容器的关键要素
    C# 查找迷宫路径
    [项目管理-24]:非暴力沟通的本质就是:”用大家都舒服的方式解决问题“
    零成本搭建个人博客搭建篇
    亚马逊的推广包括站内推广和站外推广
    ELK日志系统
    linux系统安装jdk
    由于找不到packet.dll,无法继续执行代码的多种解决方法分享
    wangEditor5在vue中的基本使用
    [附源码]计算机毕业设计SpringbootON-FIT
  • 原文地址:https://blog.csdn.net/u011619323/article/details/126040835