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

news2024/11/30 1:49:50

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈: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数据库存储” 获取源码👇👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1256071.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[AutoSAR存储] 车载存储层次 和 常用存储芯片概述

公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《AutoSAR存储》 <<<< 返回总目录 <<<< 1 存储系统层次 先抛个问题&#xff0c; 为什么要划分存储器的层次&#xff1f; 速度越快&#xff0c;但成本越高&#xff0c;从经济的角度规…

基本数据结构二叉树(1)

目录 1.树概念及结构 1.1树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树概念及结构 2.1概念 2.2现实中的二叉树&#xff1a; 2.3 特殊的二叉树&#xff1a; 2.5 二叉树的存储结构 2. 链式存…

leetcode面试经典150题——32 串联所有单词的子串(中等+困难)

题目&#xff1a; 串联所有单词的子串(1中等) 描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串&#xff08;包括相同的字符串&…

MySQL基本SQL语句(上)

MySQL基本SQL语句&#xff08;上&#xff09; 一、客户端工具的使用 1、客户端工具mysql使用 mysql: mysql命令行工具&#xff0c;一般用来连接访问mysql数据库 选项说明-u, --username指定登录用户名-p, --password指定登录密码(注意是小写p),一定要放到最后面-h, --hostn…

【Spring】Spring事务失效问题

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…

我的第一次SACC之旅

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

Android获取原始图片Bitmap的宽高大小尺寸,Kotlin

Android获取原始图片Bitmap的宽高大小尺寸&#xff0c;Kotlin val options BitmapFactory.Options()options.inJustDecodeBounds trueval decodeBmp BitmapFactory.decodeResource(resources, R.mipmap.p1, options)//此时&#xff0c;decode出来的decodeBmp宽高并不是原始图…

NX二次开发UF_CURVE_ask_spline_feature 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_spline_feature Defined in: uf_curve.h int UF_CURVE_ask_spline_feature(tag_t feature_id, tag_t * spline ) overview 概述 Inquire a general spline feature. …

如何深刻理解从二项式分布到泊松分布

泊松镇贴 二项分布和泊松分布的表达式 二项分布&#xff1a; P ( x k ) C n k p k ( 1 − p ) n − k P(xk) C_n^kp^k(1-p)^{n-k} P(xk)Cnk​pk(1−p)n−k 泊松分布&#xff1a; P ( x k ) λ k k ! e − λ P(xk) \frac{\lambda^k}{k!}e^{-\lambda} P(xk)k!λk​e−…

18. Python 数据处理之 Numpy

目录 1. 简介2. 安装和导入Numpy3. ndarray 对象4. 基本运算5. 索引、切片和迭代6. 条件和布尔数组7. 变换形状8. 操作数组 1. 简介 数据分析的流程概括起来主要是&#xff1a;读写、处理计算、分析建模和可视化4个部分。 Numpy 是Python 进行科学计算&#xff0c;数据分析时…

【咕咕送书 | 第六期】深入浅出阐述嵌入式虚拟机原理,实现“小而能”嵌入式虚拟机!

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《粉丝福利》 《linux深造日志》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 ⛳️ 写在前面参与规则引言一、为什么嵌入式系统需要虚拟化技术&#xff1f;1.1 专家推荐 二、本书适合谁&#x…

【Vue】@keyup.enter @v-model.trim的用法

目录 keyup.enter v-model.trim 情景一&#xff1a; 情景二&#xff1a; keyup.enter 作用&#xff1a;监听键盘回车事件 上一篇内容&#xff1a; 记事本 https://blog.csdn.net/m0_67930426/article/details/134630834?spm1001.2014.3001.5502 这里有个添加任务的功能&…

ESP32控制数码管实现数字叠加案例

经过了几个小时的接线和代码实现终于搞定了代码&#xff0c;贴出来大家参考下 import machine import time# 定义4个Led的引脚 led1 machine.Pin(5,machine.Pin.OUT) led2 machine.Pin(18,machine.Pin.OUT) led3 machine.Pin(19,machine.Pin.OUT) led4 machine.Pin(21,mac…

i社为什么不出游戏了?

I社&#xff0c;即国际知名的游戏公司&#xff0c;近来为何鲜有新游问世&#xff1f;曾经风靡一时的游戏开发者&#xff0c;如今为何陷入了沉寂&#xff1f;这其中的种种原因&#xff0c;值得我们深入剖析。 首先&#xff0c;I社近期的沉寂可能与其内部管理层的调整和战略规划…

VUE简易购物车程序

目录 效果预览图 完整代码 效果预览图 完整代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

3.前端--HTML标签-文本图像链接【2023.11.25】

1.HTML常用标签(文本图像链接&#xff09; 文本标签 标题 <h1> - <h6> 段落<p> 我是一个段落标签 </p> 换行 <br /> <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta ht…

第一百八十一回 如何绘制阴影效果

文章目录 1. 概念介绍2. 使用方法2.1 SegmentedButton2.2 ButtonSegment 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 1. 概念介绍 我们在本章回中介绍的SegmentedButton组件是一种分段式按钮&#xff0c;它把多个按钮连接成一组显示&#xff0c;组内再对不同的按钮进…

Day42力扣打卡

打卡记录 统计子串中的唯一字符&#xff08;找规律&#xff09; 链接 大佬的题解 class Solution:def uniqueLetterString(self, s: str) -> int:ans total 0last0, last1 {}, {}for i, c in enumerate(s):total i - 2 * last0.get(c, -1) last1.get(c, -1)ans tot…

【Java】循环语句练习

文章目录 1. 计算5的阶乘2. 计算 1! 2! 3! 4! 5!3. 数字9 出现的次数4. 判定素数5. 求1-100之间的素数6. 求2个整数的最大公约数7. 计算分数的值8. 模拟登陆9. 输出乘法口诀表10. 求出0&#xff5e;999之间的所有“水仙花数”并输出11. 猜数字游戏&#x1f648; 1. 计算5的…

GWAS:plink进行meta分析

之前教程提到过Metal是可以做Meta分析&#xff0c;除了Metal&#xff0c;PLINK也可以进行Meta分析。 命令如下所示&#xff1a; plink --meta-analysis gwas1.plink gwas2.plink gwas3.plink logscale qt --meta-analysis-snp-field SNP --meta-analysis-chr-field CHR --me…