废话少说,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_host
、your_username
、your_password
、your_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
);
-
运行脚本:
确保所有路径和数据库连接信息正确无误后,运行你的 Python 脚本。这将读取 JSONL 文件中的数据并将其插入到 MySQL 数据库中。
注意事项:
- 确保 JSONL 文件中的每个 JSON 对象都有相同的键,以便能够正确构建 SQL 插入语句。
- 如果 JSONL 文件非常大,考虑逐行读取和处理数据以减少内存占用。
- 根据你的实际需求调整错误处理和日志记录。
--end--