首页 > 数据库 >python提取PDF中表格数据到数据库

python提取PDF中表格数据到数据库

时间:2024-02-01 14:34:17浏览次数:20  
标签:表格 python list tableName value text print PDF table

工作中遇到的问题:需要从PDF中提取表格数据,并数据落到MySQL库中。具体情况如下图所示:

目录页:

代码数据页:

使用python实现代码如下(水平有限,此代码仅供自用):

import pdfplumber

pdf = r'XXX.pdf'
wookroot = pdfplumber.open(pdf)
pages = wookroot.pages
table_text = ''
for page in pages[5:9]:
    text = page.extract_text()
    # print(type(text))
    table_text += text
post_start = table_text.rfind("7 代码集")
post_end = table_text.rfind("附录1")
# print(post_start, post_end)
table_text = table_text[post_start:post_end]
# print(table_text)
tableName_list = []
for _ in range(111):
    tableName = []
    post1 = table_text.rfind("(")
    post2 = table_text.rfind(")")
    post3 = table_text.rfind(" ")
    # print(post1, post2, post3)
    # print(table_text[post3:post1], table_text[post1 + 1:post2])
    tableName.append(table_text[post3 + 1:post1])
    tableName.append(table_text[post1 + 1:post2])
    tableName_list.append(tableName)
    table_text = table_text[:post3 - 1]

# 获取表名和表注释列表tableName_list
tableName_list.sort()
print(tableName_list)
print(len(tableName_list))

value_list = []
for page in pages[112:166]:
    tables = page.extract_tables()
    for ele in tables:
        for elele in ele:
            value_list.append(elele)
value_list = value_list[10:]
print((value_list))
# print(len(vlalue_list))
xh = []
for i, value in enumerate(value_list):
    values =[]
    if value == ['代码', '名称']:
        xh.append(i)
print(len(xh))
value_list_new = []
for i in range(111):
    if i != 110:
        value_list_new.append(value_list[xh[i]:xh[i + 1]])
    else:
        value_list_new.append(value_list[xh[i]:])
#获取111个表的值的列表value_list_new
print(len(value_list_new))
print(value_list_new)

# 打开文件并写入数据
file = open("output.sql", "w") # 创建或覆盖名为"output.sql"的文本文件
# file.write("Hello, World!") # 向文件中写入字符串

for i, value in enumerate(value_list_new):
    for j in value:
        # print(j)
        if j == ['代码', '名称']:
            print("-- %s.dm_%s %s" % ((i + 1), tableName_list[i][0].lower(), tableName_list[i][1]))
            file.write("-- %s.dm_%s %s\r\n" % ((i + 1), tableName_list[i][0].lower(), tableName_list[i][1]))
            print("create table dm_%s(dm varchar(200) comment '代码', mc varchar(200) comment '名称') comment='%s';" \
                  % (tableName_list[i][0].lower(), tableName_list[i][1]))
            file.write("drop table if exists dm_%s;\r\n" % tableName_list[i][0].lower())
            file.write("create table dm_%s(dm varchar(200) comment '代码', mc varchar(200) comment '名称') comment='%s';\r\n"\
                        % (tableName_list[i][0].lower(), tableName_list[i][1]))
            
        else:
            print("insert into dm_%s values('%s','%s');" % (tableName_list[i][0].lower(), j[0], j[1]))
            file.write("insert into dm_%s(dm, mc) values('%s','%s');\r\n" % (tableName_list[i][0].lower(), j[0], j[1]))

file.close() # 关闭文件
wookroot.close()

标签:表格,python,list,tableName,value,text,print,PDF,table
From: https://www.cnblogs.com/qixinghaitang/p/18001154

相关文章

  • pyqt报错、python报错:src/pyaudio/device_api.c:9:10: fatal error: portaudio.h: 没
    报错信息:-DNDEBUG-fwrapv-O2-Wall-fPIC-O2-isystem/home/devil/anaconda3/envs/91/include-fPIC-O2-isystem/home/devil/anaconda3/envs/91/include-fPIC-I/usr/local/include-I/usr/include-I/home/devil/anaconda3/envs/91/include/python3.10-csrc/pyaudio......
  • Python实现学生信息管理系统
    学生信息管理系统系统设计系统功能结构 录入学生信息模块查找学生信息模块删除学生信息模块修改学生信息模块学生成绩排名模块统计学生总人数模块显示全部学生信息模块系统业务流程 用户->主界面->功能菜单->选择功能->是否为0->y->结束程序主函数设计 主函数的业务......
  • 【专题】2023年新消费趋势行业报告汇总PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=35100原文出处:拓端数据部落公众号2022年,全球面临疫情和经济放缓的挑战,给消费市场带来了不确定性。消费者的消费理念和生活方式也发生了变化,更加注重产品的实用性和简单性。居民收入增长放缓,消费支出减少。然而,随着疫情逐渐得到控制,中国消费市场正......
  • 【专题】2023年中国工业互联网平台行业研究报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=33647原文出处:拓端数据部落公众号这份报告合集是基于中国工业产业升级和智能制造的大背景而展开的。报告合集分析了工业互联网平台市场的发展阶段、平台玩家的产品和服务的底层逻辑以及变化趋势,并探讨了补贴减少、数据归属权之争、标准化与盈利模......
  • Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、
    全文链接:https://tecdat.cn/?p=33550原文出处:拓端数据部落公众号什么是时间序列?时间序列是一系列按时间顺序排列的观测数据。数据序列可以是等间隔的,具有特定频率,也可以是不规则间隔的,比如电话通话记录。在进行投资和交易研究时,对于时间序列数据及其操作要有专业的理解。本文......
  • pyqt编写的走迷宫游戏环境,python语言,exe文件可以成功运行Window10系统上
    地址:https://pypi.org/project/magic-maze/真实的运行效果:......
  • Python Fire:自动生成命令行接口
    命令行程序是平时写一些小工具时最常用的方式。为了让命令行程序更加灵活,我们常常会设置一些参数,根据参数让程序执行不同的功能。这样就不用频繁的修改代码来执行不同的功能。随着命令行程序功能的丰富,也就是参数多了以后,解析和管理参数之间的关系会变得越来越繁重。而本次介绍......
  • 01 python简介和环境搭建
    简介Python是简单易用人工智能前端语言够用,但是实际工作中远远不够。Python最好作为第二语言。优点:设计哲学:优美胜于丑陋,明了胜于晦涩,简介胜于复杂。为什么用Python简易:易学易用,门槛低快:开发快,像胶水可以快速粘接万物。运用广:科学计算、自动化运维、云计算服务、网络爬虫、数据......
  • python的十大数据结构之堆队列heapq(heap queue)
    heapqueque(堆队列),是一个完全二叉树,并且满足一个条件:每个节点(叶节点除外)的值都大于等于(或小于等于)它的子节点。提供了构建小顶堆的方法和一些小顶堆的基本操作方法(如入堆、出堆等),可以用于实现堆排序算法。创建堆的两种方法:importheapqlists=[3,10,20,52,2,83,52......
  • python中不同类型文件的读取方法
    在进行卷积神经网络的学习过程中,碰到了不同类型的数据集加载,下面总结一下:1、文本文件:CSV、TSV、Json、Txt1.1、简介CSV文件是逗号分隔值(Comma-SeparatedValues,CSV),其文件以纯文本形式存储表格数据(数字和文本);TSV是Tab-separatedvalues的缩写,即制表符分隔值,与csv和txt都同属......