基于python3.6读取jsonl文件,并保存到Mysql数据库

废话少说,jsonl文件放在文件夹下,我们通过三步完成数据保存。

第一部分,遍历文件夹下的文件

在 Python 3.6 中,你可以使用内置的 os 和 os.path 模块来遍历文件夹下的文件。以下是一个示例脚本,展示了如何遍历指定文件夹及其子文件夹中的所有文件,并打印出每个文件的路径:

import os  def traverse_directory(directory):  # 遍历指定目录及其子目录  for root, dirs, files in os.walk(directory):  for file in files:  # 构造文件的完整路径  file_path = os.path.join(root, file)  # 打印文件路径  print(file_path)  # 示例用法  
if __name__ == "__main__":  directory_to_traverse = '/path/to/your/directory'  # 替换为你的目录路径  traverse_directory(directory_to_traverse)

在这个脚本中:

  • os.walk(directory) 生成一个三元组 (dirpath, dirnames, filenames),其中 dirpath 是一个字符串,表示遍历到的目录的路径;dirnames 是一个列表,包含 dirpath 下所有子目录的名字(不包括路径);filenames 是一个列表,包含 dirpath 下所有非目录文件的名字。
  • for root, dirs, files in os.walk(directory): 这一行会遍历指定目录 directory 及其所有子目录。
  • for file in files: 这一行会遍历当前遍历到的目录(root)下的所有文件。
  • os.path.join(root, file) 用于构造文件的完整路径。

你可以将 directory_to_traverse 变量设置为你想要遍历的目录的路径,然后运行脚本。脚本会打印出该目录及其所有子目录中的每个文件的完整路径。

如果你只想遍历顶层目录而不包括其子目录,你可以简单地使用 os.listdir() 函数,但那样你就需要手动检查每个条目是文件还是目录,并且如果需要递归遍历子目录,你还得自己实现递归逻辑。而 os.walk() 已经为你处理了这些工作。

第二部分,读取文件数据后转换数据为字符串

在 Python 中,将字典转换为字符串是一个常见的操作,通常可以通过内置的 str() 函数或使用 json 模块来实现。下面是两种方法的详细说明:

方法一:使用 str() 函数

str() 函数可以将字典对象转换为其字符串表示形式,但这种表示形式通常用于调试目的,因为它包含了字典的键和值,以及它们的类型和结构信息(如引号、花括号和逗号)。

my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}  
dict_str = str(my_dict)  
print(dict_str)

输出:

{'name': 'Alice', 'age': 30, 'city': 'New York'}

这种方法生成的字符串虽然可读,但通常不适合用于数据交换或存储,因为它包含了额外的字符(如类型和结构信息)。

方法二:使用 json 模块

json 模块提供了一种更标准的方式来将字典转换为字符串,这种字符串格式被称为 JSON(JavaScript Object Notation)。JSON 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。

import json  my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}  
dict_str = json.dumps(my_dict)  
print(dict_str)

输出:

{"name": "Alice", "age": 30, "city": "New York"}

注意,与 str() 函数生成的字符串不同,json.dumps() 生成的字符串中的键和字符串值都被双引号包围,并且整个字符串是一个有效的 JSON 格式。

如果你需要将这个 JSON 字符串转换回字典,可以使用 json.loads() 函数:

original_dict = json.loads(dict_str)  
print(original_dict)

输出:

{'name': 'Alice', 'age': 30, 'city': 'New York'}

使用 json 模块进行字典和字符串之间的转换是处理数据交换和存储时的推荐做法。

第三部分,字符串插入数据

mysql.connector  

在 Python 中插入数据到 MySQL 数据库通常涉及几个步骤:连接到数据库、创建游标(cursor)对象、准备 SQL 插入语句、执行语句并提交事务。以下是一个使用 mysql-connector-python 库将数据插入 MySQL 数据库的示例。

首先,确保你已经安装了 mysql-connector-python 库。如果还没有安装,可以使用以下命令进行安装:

pip install mysql-connector-python

然后,你可以使用以下 Python 脚本来插入数据:

import mysql.connector  
from mysql.connector import Error  def create_connection(host_name, user_name, user_password, db_name):  connection = None  try:  connection = mysql.connector.connect(  host=host_name,  user=user_name,  passwd=user_password,  database=db_name  )  print("Connection to MySQL DB successful")  except Error as e:  print(f"The error '{e}' occurred")  return connection  def insert_data(connection, table_name, data):  try:  cursor = connection.cursor()  # 假设data是一个字典,键是列名,值是要插入的数据  columns = ', '.join(data.keys())  placeholders = ', '.join(['%s'] * len(data))  sql_insert_query = f"""INSERT INTO {table_name} ({columns}) VALUES ({placeholders})"""  cursor.execute(sql_insert_query, tuple(data.values()))  connection.commit()  print("Data inserted successfully")  except Error as e:  print(f"The error '{e}' occurred")  # 示例数据  
data_to_insert = {  'column1': 'value1',  'column2': 'value2',  'column3': 123  # 假设这是一个整数类型的列  
}  # 数据库连接信息  
connection = create_connection(  host_name="your_host",  user_name="your_username",  user_password="your_password",  db_name="your_database"  
)  # 插入数据  
if connection is not None:  insert_data(connection, 'your_table', data_to_insert)  connection.close()

在这个脚本中:

  • create_connection 函数用于创建到 MySQL 数据库的连接。
  • insert_data 函数接受数据库连接、表名和一个包含要插入数据的字典。它构建了一个 SQL 插入语句,并执行该语句。
  • data_to_insert 是一个示例字典,包含要插入的数据。你需要根据你的表结构来修改这个字典。
  • 数据库连接信息(如主机名、用户名、密码和数据库名)需要根据你的实际情况进行更改。

请注意,这个脚本假设你的表 your_table 已经存在,并且具有与 data_to_insert 字典中的键相匹配的列。如果列名或数据类型不匹配,你需要相应地调整字典或表结构。

此外,为了安全起见,避免直接在 SQL 语句中拼接用户输入的值,而是使用参数化查询(如上例所示),这可以防止 SQL 注入攻击。

pymysql 插入数据

使用 pymysql 库向 MySQL 数据库插入数据涉及几个关键步骤:建立数据库连接、创建一个游标对象、准备并执行 SQL 插入语句,以及提交事务。以下是一个简单的示例,演示了如何使用 pymysql 插入数据:

首先,确保你已经安装了 pymysql 库。如果尚未安装,可以使用以下命令进行安装:

pip install pymysql

然后,你可以使用以下 Python 脚本来插入数据:

import pymysql  # 数据库连接配置  
db_config = {  'host': 'your_host',  # 数据库主机名或IP地址  'user': 'your_username',  # 数据库用户名  'password': 'your_password',  # 数据库密码  'database': 'your_database',  # 数据库名  'charset': 'utf8mb4',  # 字符集,推荐使用utf8mb4以支持完整的Unicode  'cursorclass': pymysql.cursors.DictCursor  # 可选:使用字典游标返回结果  
}  # 插入数据的函数  
def insert_data(table_name, data):  # 建立数据库连接  connection = pymysql.connect(**db_config)  try:  with connection.cursor() as cursor:  # 假设data是一个字典,键是列名,值是要插入的数据  columns = ', '.join(data.keys())  placeholders = ', '.join(['%s'] * len(data))  sql_insert_query = f"INSERT INTO {table_name} ({columns}) VALUES ({placeholders})"  # 执行SQL插入语句  cursor.execute(sql_insert_query, tuple(data.values()))  # 提交事务  connection.commit()  print("Data inserted successfully")  except Exception as e:  print(f"An error occurred: {e}")  # 如果发生错误,回滚事务  connection.rollback()  finally:  # 关闭数据库连接  connection.close()  # 示例数据  
data_to_insert = {  'column1': 'value1',  'column2': 'value2',  'column3': 123  # 假设这是一个整数类型的列  
}  # 调用插入数据的函数  
insert_data('your_table', data_to_insert)

在这个脚本中:

  • db_config 字典包含了数据库连接所需的配置信息。
  • insert_data 函数接受表名和一个包含要插入数据的字典作为参数。
  • 使用 pymysql.connect(**db_config) 建立数据库连接。
  • 使用 with connection.cursor() as cursor: 语句创建一个游标对象,该对象在 with 块结束时会自动关闭。
  • 构建 SQL 插入语句,并使用 cursor.execute() 方法执行它。
  • 使用 connection.commit() 提交事务。
  • 如果在执行过程中发生异常,使用 connection.rollback() 回滚事务,并在 finally 块中关闭数据库连接。

请确保将 your_hostyour_usernameyour_passwordyour_database 和 your_table 替换为你的实际数据库信息。此外,data_to_insert 字典中的键应与你的数据库表中的列名相匹配。

第四部分,直接将jsonl文件写入数据库

要在 Python 3.6 中读取 JSONL 文件(每行一个 JSON 对象)并将其存入 MySQL 数据库,你可以使用以下步骤:

  • 安装必要的库:确保你安装了 mysql-connector-python 库来连接和操作 MySQL 数据库,以及 json 库来处理 JSON 数据。你可以使用 pip 来安装 mysql-connector-python

pip install mysql-connector-python
  • 编写 Python 脚本

下面是一个示例脚本,展示了如何读取 JSONL 文件并将数据插入 MySQL 数据库。

import json  
import mysql.connector  
from mysql.connector import Error  def create_connection(host_name, user_name, user_password, db_name):  connection = None  try:  connection = mysql.connector.connect(  host=host_name,  user=user_name,  passwd=user_password,  database=db_name  )  print("Connection to MySQL DB successful")  except Error as e:  print(f"The error '{e}' occurred")  return connection  def execute_query(connection, query, params=None):  cursor = connection.cursor()  try:  if params is None:  cursor.execute(query)  else:  cursor.execute(query, params)  connection.commit()  print("Query executed successfully")  except Error as e:  print(f"The error '{e}' occurred")  def read_jsonl_file(file_path):  jsonl_data = []  with open(file_path, 'r', encoding='utf-8') as file:  for line in file:  json_obj = json.loads(line.strip())  jsonl_data.append(json_obj)  return jsonl_data  def insert_into_database(connection, jsonl_data, table_name):  columns = ', '.join(jsonl_data[0].keys())  placeholders = ', '.join(['%s'] * len(jsonl_data[0]))  insert_query = f"INSERT INTO {table_name} ({columns}) VALUES ({placeholders})"  for record in jsonl_data:  values = tuple(record.values())  execute_query(connection, insert_query, values)  # Example usage  
if __name__ == "__main__":  jsonl_file_path = 'path_to_your_jsonl_file.jsonl'  connection = create_connection(  host_name="your_host",  user_name="your_username",  user_password="your_password",  db_name="your_database"  )  if connection is not None:  jsonl_data = read_jsonl_file(jsonl_file_path)  table_name = 'your_table'  # Make sure the table exists in the database  insert_into_database(connection, jsonl_data, table_name)  connection.close()
  • 准备数据库

确保你的 MySQL 数据库已经存在,并且表结构匹配 JSONL 文件中的数据结构。例如,如果你的 JSONL 文件包含如下数据:

{"id": 1, "name": "John Doe", "age": 30}  
{"id": 2, "name": "Jane Smith", "age": 25}

那么你的 MySQL 表结构应该类似于:

CREATE TABLE your_table (  id INT PRIMARY KEY,  name VARCHAR(255),  age INT  
);
  1. 运行脚本

    确保所有路径和数据库连接信息正确无误后,运行你的 Python 脚本。这将读取 JSONL 文件中的数据并将其插入到 MySQL 数据库中。

注意事项

  • 确保 JSONL 文件中的每个 JSON 对象都有相同的键,以便能够正确构建 SQL 插入语句。
  • 如果 JSONL 文件非常大,考虑逐行读取和处理数据以减少内存占用。
  • 根据你的实际需求调整错误处理和日志记录。

 

--end--

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

23年408数据结构

第一题: 解析: 第一点,我们要知道顺序存储的特点:优点就是随用随取,就是你想要查询第几个元素可以直接查询出来,时间复杂度就是O(1),缺点就是不适合删除和插入,因为每次删除和插入一…

android app执行shell命令视频课程补充android 10/11适配-千里马android

(https://blog.csdn.net/learnframework/article/details/120103471) https://blog.csdn.net/learnframework/article/details/120103471 hi,有学员在学习跨进程通信专题课程时候,在实战app执行一个shell命令的项目时候,对课程本身的android …

MySQL-13.DQL-聚合函数

一.DQL-分组查询 二.聚合函数 -- DQL:分组查询 -- 聚合函数 -- 1.统计该企业员工数量 count select count(id) from tb_emp; select count(job) from tb_emp;select count(A) from tb_emp; select count(*) from tb_emp;-- 2.统计该企业最早入职的员工 min select min(entr…

Pyside6 布局管理器(3)--- 控件尺寸、尺寸策略与布局的关系详解

在学习QWidget时我们已经学习了控件尺寸的一些基本设置,比如设置其作为顶层窗口时resize()方法,setGeometry()等方法。但在将控件添加到布局中后我们会发现,这些方法对于QWidget做为子控件时却是无效的。而布局的显示与大小也受到控件的影响。…

网络资源模板--Android Studio 实现简易新闻App

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--基于Android studio 实现的简易新闻App 二、项目测试环境 三、项目详情 登录页 用户输入: 提供账号和密码输入框,用户可以输入登录信息。支持“记…

RabbitMQ最新版本4.0.2在Windows下的安装及使用

RabbitMQ 是一个开源的消息代理和队列服务器,提供可靠的消息传递和队列服务。它支持多种消息协议,包括 AMQP、STOMP、MQTT 等。本文将详细介绍如何在 Windows 系统上安装和使用最新版本的 RabbitMQ 4.0.2。 前言 RabbitMQ 是用 Erlang 语言开发的 AMQP&…

【Linux】【命令】diff

diff DescriptionsArgumentsExamples直接使用diff命令-u 输出格式-c 输出格式并列输出-s 和 -q 脚本示例示例1:目录及文件差异 Descriptions diff命令用于对比两个文件或者两个文件夹的不同之处,求基本语法如下所示: diff [OPTION]... FILES…

信号与噪声分析——第一节-确定信号的分析

目录 1.确定信号的分析 1.1确定信号的分类: 1.周期信号与非周期信号: 周期信号的定义: 性质: 2.能量信号与功率信号: 定义 区别: 3.基带信号与频带信号: 基带信号的定义: …

使用Matplotlib绘制箱线图:详细指南与示例

在数据分析和可视化领域,箱线图(Box Plot)是一种强大的工具,用于展示数据的分布特征,包括中位数、四分位数、异常值等。本文将详细介绍如何使用Matplotlib库在Python中绘制箱线图,并通过一个实际的血压数据…

基于微信小程序二手物品调剂系统设计与实现

文章目录 前言项目介绍技术介绍功能介绍核心代码数据库参考 系统效果图文章目录 前言 文章底部名片,获取项目的完整演示视频,免费解答技术疑问 项目介绍 二手物品调剂系统是一种在线平台,旨在促进用户之间的二手物品交易。该系统提供了一个…

数智合同 | 业财一体与履约联动的数字化转型

随着信息化技术的发展,合同数智化管理为应对合同管理挑战提供了新机遇。企业需要深入思考数智化手段在合同管理中的应用,以提高合同管理水平,应对新形势下的市场竞争挑战与合规要求,实现企业的高质量发展。 2024年5月,…

数据中心母线槽测温监控装置的优势和如何选型

在当今数字化高速发展的时代,数据中心成为了信息存储与处理的核心枢纽。而确保数据中心的稳定运行,对于企业和社会来说至关重要。其中,母线作为数据中心电力传输的关键环节,其正常运行直接关系到整个数据中心的可靠性。为了保障数…

2024新手攻略:项目管理工具+PMP备考经验不容错过!

(一)热门工具大盘点 禅道是一款专注于软件开发项目管理的工具。它涵盖了项目管理的各个环节,包括需求管理、任务分配、缺陷跟踪等。禅道的优势在于其对软件开发流程的深入理解和支持,能够帮助开发团队更好地管理项目进度和质量。…

免费的国标设备端模拟器,支持自定义编程,批量模拟大量国标GB28181设备

GB/T 28181是中国国家公共安全视频监控联网系统(简称“国标GB28181”)的一套标准,主要用于规范视频监控系统的互联互通。这套标准的实施旨在推动不同厂家设备之间的互操作性,促进视频监控市场的健康发展。本软件是针对GB28181标准…

算法01----移动零(C++)

题目展示 算法原理 我们这里要用到的算法是双指针移动,和我们之前学的快排的核心思想是一样的。我们看看怎么做吧。我会以图片的形式将我的思路告知大家。 这就是整个题目的整体思想算法,大家理解一下,其实这道题目还是很简单的。 代码编写…

02篇 机械考研复试简历保姆级教程,考研简历联系导师邮件复试调剂超全攻略 导师喜欢看到的简历(附模板)

考研复试简历怎么写?导师喜欢看到的简历(附模板) 复试简历,重要程度max!绝非小事一桩!它就像是你硬核经历的闪亮外衣,条理清晰、逻辑严谨且设计感十足,一定能在导师心中留下深刻印象…

基于neo4j知识图谱的菜谱推荐系统

🍴 AI菜谱推荐系统让你“煮”事半功倍! 🍴 找不到做饭灵感的时候,是不是总觉得“今天吃啥”这道选择题简直是终极挑战?别急,我们基于Neo4j知识图谱的菜谱推荐系统,正是为了解决你的困扰而设计&a…

空洞卷积:Atrous/Dilated convolution - 语义分割中多用到

没办法,我还是很多基础的、底层的模块不通透,读论文难免会受到阻碍,而且这现在科研任务很急了,必须要马上动手实验,全给我弄明白、特别是算法! 空洞卷积-可变形卷积-这一个个我都要。 空洞卷积据说在语义分…

【完-网络安全】Windows防火墙及出入站规则

文章目录 防火墙入站和出站的区别域网络、专用网络、公用网络的区别 防火墙 防火墙默认状态一般是出站允许,入站阻止。 入站和出站的区别 入站就是别人来访问我们的主机,也就是正向shell的操作 出站就是反向shell,主机需要主动连接kali&am…

智能指针(3)

目录 可能问题五: 问题分析: 答案格式: shared_ptr的模拟实现 部分1:引用计数的设计(分考点1) 代码实现: 部分2:作为类所必须的部分(分考点2) 代码实现: 部分3:拷贝构造函数…