mysql - 我正在尝试解析本地磁盘上的 350 个文件并将数据作为 json 对象存储到数据库中

标签 mysql sql json python-3.x

我正在使用 python 解析包含 json 数据的 350 个 txt 文件。我能够检索其中 62 个对象并将它们存储在 mysql 数据库中,但之后我收到一条错误消息 JSONDecodeError: ExtraData

Python:

import os
import ast
import json
import mysql.connector as mariadb
from mysql.connector.constants import ClientFlag

mariadb_connection = mariadb.connect(user='root', password='137800000', database='shaproject',client_flags=[ClientFlag.LOCAL_FILES])
cursor = mariadb_connection.cursor()

sql3 = """INSERT INTO shaproject.alttwo (alttwo_id,responses) VALUES """

os.chdir('F:/Code Blocks/SEM 2/DM/Project/350/For Merge Disqus')
current_list_dir=os.listdir()
print(current_list_dir)
cur_cwd=os.getcwd()
cur_cwd=cur_cwd.replace('\\','/')
twoid=1

for every_file in current_list_dir:
    file=open(cur_cwd + "/" + every_file)
    utffile=file.read()
    data=json.loads(utffile)
    for i in range(0,len(data['response'])):
        data123 = json.dumps(data['response'][i])
        tup=(twoid,data123)
        print(sql3+str(tup))
        twoid+=1
        cursor.execute(sql3+str(tup)+";")
        print(tup)
    mariadb_connection.commit()

我在网上搜索了一下,发现多个dump语句导致了这个错误。但我无法解决它。

最佳答案

您想使用glob .

而不是过于宽松的os.listdir(), 使用 glob 仅关注 *.json 文件。

在要求 .loads() 解析文件之前打印出文件名。 将任何格式错误的文件重命名为 .txt 而不是 .json,以便跳过它们。

请注意,您可以将打开的文件直接传递给 .load() ,如果你愿意的话。

关闭打开的文件是一件好事。 而不是直接赋值(没有 close()!) with 会更好:

with open(cur_cwd + "/" + every_file) as file:
    data = json.load(file)

谈论当前当前工作目录似乎 既重复又多余。 称之为cwd就足够了。

关于mysql - 我正在尝试解析本地磁盘上的 350 个文件并将数据作为 json 对象存储到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55882972/

相关文章:

mysql - 数据库模型所需的建议 - 附加部分 EER

mysql - mysql查询出了什么问题

mysql - 如果引用表中的值为空或零,则取消插入

sql - 不允许远程表值函数调用

jquery - 将 JSON 对象存储在 HTML jQuery 的数据属性中

php - 使用 PDO 在两个数据库之间传输 mysql 表

mysql - 如何编写一个返回所有玩家姓名的 SQL 查询...?

sql - 仅使用 SQL 将 Blob 从 MySQL 数据库导出到文件

json - 使用JSon.NET对动态数据反序列化JSON

xml - JSONX 到 JSON 转换