首页 > 解决方案 > 我正在尝试解析本地磁盘上的 350 个文件并将数据作为 json 对象存储到数据库中

问题描述

我正在使用 python 解析 350 个具有 json 数据的 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语句导致了这个错误。但我无法解决它。

标签: mysqlsqljsonpython-3.x

解决方案


你想使用glob

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

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

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

关闭打开的文件将是一件好事。而不是直接分配(没有close()!)你会更好with

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

谈论当前的当前工作目录似乎既重复又多余。调用它就足够了cwd


推荐阅读