当前位置: 首页 > news >正文

【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


Python将100个PDF文件对应的json文件存储到MySql数据库(源码)


目录

  • Python将100个PDF文件对应的json文件存储到MySql数据库(源码)
  • 1. 需求描述
  • 2. 结果展示
  • 3. 代码分析
    • 3. 1 导入模块
    • 3.2 数据库配置
    • 3.3 数据库连接
    • 3.4 创建数据库表
    • 3.5 数据插入函数
    • 3.6 加载和处理JSON数据
    • 3.7数据检索函数
    • 1.8 示例检索和清理
  • 部分代码


1. 需求描述

给100篇PDF文件与其一一对应的json文件,假定这一百篇PDF文件存储于D盘的名为100PDF的文件夹中,json文件存储在D盘名为100JSON的文件夹中。

要求
1.利用python对接数据库,将这100篇PDF和对应的JSON文件存储在名为Mypdf的数据库中。

2.写一段python代码,能够调用这100篇 PDF和其对应的JSON文件。

100_PDF_MetaData.json 部分内容如下:

{"elsevier_05cbcb9ef5629bc25e84df43572f9d1eddb9a35f": {"date": "1981-12-01T00:00:00","ref_paper": [],"conference": "","keywords": [],"year": 1981,"author": {"affiliation": ["Chemistry Department, B-017, University of California at San Diego, La Jolla, CA 92093 U.S.A.","Chemistry Department, B-017, University of California at San Diego, La Jolla, CA 92093 U.S.A."],"name": ["R.W. Carlson","G.W. Lugmair"]},"last_page": 8,"link": "https://www.sciencedirect.com/science/article/abs/pii/0012821X81901126","abstract": "Pristine samples from the lunar highlands potentially offer important information bearing on the nature of early crustal development on all the terrestrial planets. One apparently unique sample of this group of lunar crustal rocks, the feldspathic lherzolite 67667, was studied utilizing the Sm-Nd radiometric system in an attempt to define its age and the implications of that age for the evolution of the lunar highlands. Data for 67667 precisely define an isochron corresponding to an age of 4.18\u00b10.07 AE. The observed lack of disturbance of the Sm-Nd system of this sample may suggest that this time marks its crystallization at shallow depth in the lunar crust. However, the possibility that this age, as well as those of other highland rocks, indicate the time of their impact-induced excavation from regions deep enough in the lunar crust to allow subsolidus isotopic equilibrium to be produced or maintained between their constituent minerals is also considered. Taken together, bulk rock Sm-Nd data for four \u201chigh-Mg\u201d rocks, including 67667, indicate that the chemical characteristics of all their source materials were established 4.33\u00b10.08 AE ago and were intimately associated with the parent materials of KREEP. This finding provides more support for the concept of a large-scale differentiation episode early in lunar history. The possible roles of the crystallization of a global magma ocean, endogenous igneous activity, and of planetesimal impact, in producing the observed geochemical and chronological aspects of lunar highland rocks are discussed.","title": "Sm-Nd age of lherzolite 67667: implications for the processes involved in lunar crustal formation","paper_id": "elsevier_05cbcb9ef5629bc25e84df43572f9d1eddb9a35f","volume": 56,"update_time": "2022-07-16T14:06:08.117141","journal": "Earth and Planetary Science Letters","issn": "0012-821X","first_page": 1,"publisher": "elsevier","doi": "10.1016/0012-821X(81)90112-6"},.......}

pdf文档内容如下:

在这里插入图片描述


2. 结果展示

json数据表:

关注公众号,回复 “PDF数据库存储” 获取源码👇👇👇

在这里插入图片描述

论文内容数据表:

关注公众号,回复 “PDF数据库存储” 获取源码👇👇👇

在这里插入图片描述


3. 代码分析

当然,让我们更详细地分析这段代码的每个部分:

3. 1 导入模块

  • os:用于文件和目录操作,如遍历目录和打开文件。
  • pymysql:一个Python库,用于连接和操作MySQL数据库。
  • PyPDF2:Python库,用于读取PDF文件。
  • json:内置库,用于处理JSON数据,这里主要用于读取JSON文件。

3.2 数据库配置

  • db_config:一个字典,包含连接MySQL数据库所需的信息(如主机、用户、密码、数据库名)。

3.3 数据库连接

  • 使用pymysql.connect建立到MySQL的连接。
  • cursor对象用于执行SQL命令。

3.4 创建数据库表

  • CREATE TABLE SQL语句被用来创建两个表:paper_metadata(存储论文的元数据)和paper_content(存储论文的PDF内容)。
  • IF NOT EXISTS确保如果表已存在,不会重复创建。

3.5 数据插入函数

  • insert_metadata:将JSON中的元数据插入paper_metadata表。这里处理了如作者、出版日期等多种字段。
  • insert_content:将PDF文件的内容插入paper_content表。这里只提取了PDF的第一页内容。
  • 使用cursor.execute来执行SQL插入命令,并且在每次插入后调用connection.commit来提交事务。

3.6 加载和处理JSON数据

  • 从指定路径加载JSON文件,其中包含与PDF文件相关联的元数据。
  • 遍历一个特定目录中的PDF文件,使用PyPDF2读取每个文件,提取第一页内容。
  • 对于每个PDF,如果它的ID在JSON元数据中,它的内容和元数据将被插入到数据库中。

3.7数据检索函数

  • retrieve_data:根据paper_idpaper_metadatapaper_content表中检索信息。
  • 使用cursor.execute执行查询,并通过cursor.fetchone获取结果。

1.8 示例检索和清理

  • 使用retrieve_data函数来检索特定paper_id的数据。
  • 如果找到数据,它将被打印出来;如果没有,会打印一条消息表示没有找到数据。
  • 最后,代码清理部分关闭了数据库游标和连接。

部分代码

部分代码如下:

import os
import pymysql
from PyPDF2 import PdfReader
import json# 数据库配置
db_config = {'host': '127.0.0.1','user': 'root','password': 'root','database': 'Mypdf'
}# 连接数据库
connection = pymysql.connect(**db_config)
cursor = connection.cursor()# 创建表格 - paper_metadata
cursor.execute("""CREATE TABLE IF NOT EXISTS paper_metadata (paper_id VARCHAR(255) PRIMARY KEY,# ...略....)
""")# 创建表格 - paper_content
cursor.execute("""...略(源码关注公众号:测试开发自动化, 回复 “PDF数据库存储” 获取)
""")# 插入数据的函数 - paper_metadata
def insert_metadata(paper_id, json_data):query = """INSERT INTO paper_metadata (paper_id, title, date, year, abstract, authors, affiliations, last_page, first_page, link, ref_paper, conference, keywords, volume, update_time, journal, issn, publisher, doi)VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"""authors = ', '.join(json_data['author']['name'])affiliations = ', '.join(json_data['author']['affiliation'])cursor.execute(query, (paper_id, json_data['title'], json_data['date'], json_data['year'], json_data['abstract'], authors, affiliations, json_data['last_page'], json_data['first_page'], json_data['link'], str(json_data['ref_paper']), json_data['conference'], str(json_data['keywords']), json_data['volume'], json_data['update_time'], json_data['journal'], json_data['issn'], json_data['publisher'], json_data['doi']))connection.commit()...# 检索数据的函数
def retrieve_data(paper_id):# 查询metadata表query_metadata = "SELECT * FROM paper_metadata WHERE paper_id = %s"# ...略# 查询content表query_content = "SELECT pdf_content FROM paper_content WHERE paper_id = %s"# ...略# 检索数据的示例
result = retrieve_data("elsevier_05cbcb9ef5629bc25e84df43572f9d1eddb9a35f")
if result:print(result)
else:print("No data found for this paper ID.")# 关闭连接
cursor.close()
connection.close()

关注公众号,回复 “PDF数据库存储” 获取源码👇👇👇

相关文章:

【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…...

Android:Google三方库之Adjust集成详细步骤

通过 Adjust 安卓 SDK,您可以在自己的安卓应用中跟踪归因、事件及更多数据。请按照本指南中说明的步骤操作,在应用内设置 Adjust SDK 1、添加依赖 //adjustimplementation("com.adjust.sdk:adjust-android:4.33.5")implementation("com.…...

prometheus|云原生|grafana-9.4.3版本的主题更改

一, grafana-9.4.3版本的主题更改 grafana-9.4.3版本应该是目前比较高的版本了,但不知道是什么原因,grafana的主题界面并不多,只有暗色,亮色和系统色三种 配置管理----首选项里可以看到 亮色: 暗色&…...

B033-Servlet交互 JSP

目录 ServletServlet的三大职责跳转:请求转发和重定向请求转发重定向汇总请求转发与重定向的区别用请求转发和重定向完善登录 JSP第一个JSP概述注释设置创建JSP文件默认字符编码集 JSP的java代码书写JSP的原理三大指令九大内置对象改造动态web工程进行示例内置对象名…...

Less 安装教程

文章目录 前言LESS的系统要求安装LESS例子输出Less编译css工具后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:Sass和Less 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板…...

Java研学-多线程

一 名词解析 1 线程 : 控制指定APP(进程)执行的最基本单元(最小单位) 2 进程 : 硬件设备上的每一个应用程序 3 单线程 : 一个进程中只有一个线程执行,实际上基本没有这种情况 4 多线程 : 一个进程中至少有两个或两个以上的线程在执行 二 创建方式 1 共有三种:Thread类. R…...

【日常总结】如何禁止浏览器 http自动跳转成https

一、场景 二、问题 三、解决方案 3.1 chrome 浏览器 3.2 edge 浏览器: 3.3 Safari 浏览器 3.4 Firefox 浏览器 3.5 Microsoft Edge 一、场景 公司网站 http:// 谷歌浏览器中自动转换成 https:// 导致无法访问 二、问题 nginx配置ssl 443接口, ht…...

文本转语音:微软语音合成标记语言 (SSML) 文本结构和事件

​ SSML 的语音服务实现基于万维网联合会的语音合成标记语言版本 1.0。 ​ 语音服务支持的元素可能与 W3C 标准不同。 每个 SSML 文档是使用 SSML 元素(或标记)创建的。 这些元素用于调整语音、风格、音节、韵律、音量等。 下面是 SSML 文档的基本结构…...

计算机网络之物理层(数据通信有关)

一、概述 1.1物理层引入的目的 屏蔽掉传输介质的多样性,导致数据传输方式的不同;物理层的引入使得高层看到的数据都是统一的0,1构成的比特流 1.2.物理层如何实现屏蔽 物理层靠定义的不同的通信协议(一般称通信规程) 这些协议…...

安卓开发之HTTP API服务接口设计(基于okhttp3请求)

安卓中的请求 OkHttp3 是一个开源的 Java/Android HTTP 客户端库,由 Square 公司开发。它提供了简洁和高效 的 API ,用于进行 HTTP 请求、处理响应以及与服务器进行通信。 以下是 OkHttp3 的一些主要特点和功能: 简单易用: OkHttp3 提供了简洁的 API ,使得发送 HTTP 请求变…...

我的第一次SACC之旅

今年有很多第一次,第一次作为“游客”参加DTCC(中国数据库大会),第一次作为讲师参与ACDU中国行(成都站),第一次参加OB年度发布会(包含DBA老友会),而这次是第一…...

Codeforces Round 908 (Div. 2)

Codeforces Round 908 (Div. 2) 文章目录 Codeforces Round 908 (Div. 2)ABCD A 获取对战的最后一个即为胜者 #include <bits/stdc.h>using namespace std;void solve() {int n;cin >> n;string s;cin >> s;cout << s[n-1] << endl; }int main…...

Java实现-数据结构 2.时间和空间复杂度

.如何衡量一个算法的好坏&#xff1a;时间复杂度和空间复杂度 算法效率分为时间效率和空间效率&#xff0c;时间效率称为时间复杂度&#xff0c;空间效率称为空间复杂度 时间复杂度 算法的时间复杂度是一个数学函数&#xff0c;它描述了算法的运行时间&#xff0c;一个算法执…...

Docker exec命令

docker exec &#xff1a;在运行的容器中执行命令。 语法&#xff1a; docker exec [OPTIONS] CONTAINER COMMAND [ARG...]OPTIONS说明&#xff1a; -d&#xff1a;分离模式&#xff1a; 在后台运行 -i&#xff1a;即使没有附加也保持STDIN打开 -t&#xff1a;分配一个伪终…...

可燃气体监测仪助力燃气管网安全监测,效果一览

城市地下管线是指城市范围内供应水、排放水、燃气等各类管线及其附属设施&#xff0c;它们是保障城市正常运转的重要基础设施且影响着城市生命线。其中燃气引发的事故近些年不断增加&#xff0c;由于燃气管线深埋地下环境复杂&#xff0c;所以仅仅依赖人工巡查难以全面有效地防…...

Kafka(二)在WSL搭建Schema Registry

目录 1 Avro与Schema Registry2 搭建Schema Registry2.1 下载Confluent并解压2.2 设置环境变量2.3 修改配置2.4 启动服务 3 API列表 1 Avro与Schema Registry Apache Avro 是一种高效的数据序列化系统&#xff0c;用于在不同的应用程序和平台之间传输和存储数据。它提供了一种…...

webrtc AEC 线性滤波 PBFDAF(均匀分块频域自适应滤波)介绍

计算一个脉冲响应和输入信号的卷积&#xff0c;除了使用原始的时域卷积以外&#xff0c;还有如下方法&#xff1a; FFT卷积的方法&#xff1a;对输入信号&#xff08;长度M&#xff09;和脉冲响应&#xff08;长度N&#xff09;分别补零到K&#xff08;K>MN-1)&#xff0c;…...

开源vs闭源,处在大模型洪流中,向何处去?

文章目录 一、开源和闭源的优劣势比较1.1 开源优势1.2 闭源的优势 二、开源和闭源对大模型技术发展的影响2.1 数据共享2.2 算法创新2.3 业务拓展2.4 安全性和隐私2.5 社会责任和伦理 三、开源与闭源的商业模式比较3.1 盈利模式3.2 市场竞争3.3 用户生态3.4 创新速度 四&#xf…...

web前端之vue和echarts的堆叠柱状图顶部显示总数、鼠标悬浮工具提示、设置图例的显示与隐藏、label、legend、tooltip

MENU 效果图htmlJavaScripstyle解析 效果图 html <template><div><div><div id"idStackedColumnChart" style"width: 100%; height: 680px"></div></div></div> </template>JavaScrip export default {…...

Excel表中合并两个Sheet的方法?

按AltF11&#xff0c;调出Visual Basic 界面。 在左侧窗口中&#xff0c;右键选择“插入”—“模块”&#xff1a; 将如下代码粘贴进去&#xff0c;点击运行按钮&#xff0c;完成数据表合并。 Sub MergeAllSheetsInThisWorkbook() On Error Resume Next Application.ScreenU…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...