我正在使用 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/