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

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



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数据库存储” 获取源码👇👇👇


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
10月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
1090 7
|
11月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
1664 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
11月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
11月前
|
机器学习/深度学习 数据采集 算法
基于mediapipe深度学习的运动人体姿态提取系统python源码
本内容介绍了基于Mediapipe的人体姿态提取算法。包含算法运行效果图、软件版本说明、核心代码及详细理论解析。Mediapipe通过预训练模型检测人体关键点,并利用部分亲和场(PAFs)构建姿态骨架,具有模块化架构,支持高效灵活的数据处理流程。
|
11月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
883 0
|
11月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
并行计算 算法 Java
Python3解释器深度解析与实战教程:从源码到性能优化的全路径探索
Python解释器不止CPython,还包括PyPy、MicroPython、GraalVM等,各具特色,适用于不同场景。本文深入解析Python解释器的工作原理、内存管理机制、GIL限制及其优化策略,并介绍性能调优工具链及未来发展方向,助力开发者提升Python应用性能。
643 0
|
JSON 前端开发 JavaScript
MySQL 8.0 可以操作 JSON 了,牛逼。。。
MySQL 8.0 可以操作 JSON 了,牛逼。。。
484 0
|
JSON 前端开发 JavaScript
MySQL 8.0 可以操作 JSON 了,牛逼。。。
简单概述 不允许为null; Json格式定义与LONGBLOB or LONGTEXT类似; 它的最大长度是受到max_allowed_packet所控制的; 查看JSON字段所占用空间大小的函数时JSON_STORAGE_SIZE(xxx); 除普通的Json操作,额外支持GeoJSON (基于几何图形的针对地理空间数据交换格式)一些相关操作; 对Json栏位支持索引(结合Mysql8.0新特性,函数index); 一个可以支持部分的,原地更新Json Column 的可选优化项加入MySql8.0; 可以使用的函数有JSON_SET(), JSON_REPLACE() ,JSON_RE
1221 0

推荐镜像

更多