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

时间:2019-04-27 17:10:32

标签: 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()

我在线搜索,发现多个转储语句导致此错误。但是我无法解决。

1 个答案:

答案 0 :(得分:0)

您要使用glob

不是太宽容的os.listdir(), 使用glob仅关注*.json文件。

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

请注意,您可以根据需要将打开的文件直接传递到.load()

关闭打开的文件将是一件好事。 而不是直接分配(不带close()!) 您最好使用with

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

似乎正在谈论当前当前的工作目录 重复和重复。 将其称为cwd就足够了。