使用Pandas在python中将大字符串文件转换为json

使用Pandas在python中将大字符串文件转换为json,python,json,Python,Json,我有一个包含几个json文件的大型数据库。有推文,每条推文都是一个 {"object":"Message", "action":"create", "data":{"id":152376374,"body":"@PeakySellers right there with you brother. 368$","created_at":"2019-01-31T23:59:56Z", "user":{"id":971815,"username":"mtothe5thpower",}' } 我在一个

我有一个包含几个json文件的大型数据库。有推文,每条推文都是一个

{"object":"Message",
"action":"create",
"data":{"id":152376374,"body":"@PeakySellers right there with you brother. 368$","created_at":"2019-01-31T23:59:56Z",
"user":{"id":971815,"username":"mtothe5thpower",}'
}
我在一个文件中有300万行,大小超过5GB。我用熊猫阅读文件,效果很好
data2=pd.read\u表('file',sep=“\n”,header=None)

现在我有了一个数据库,每行有一个元素(就像我前面提到的tweet),其类型是String。 现在,我将每个元素转换为字典,以使用该文件并访问每个元素。我使用的代码如下:

for i, row in data2.itertuples():
    data2["dic"][i] = json.loads(data2[0][i])

虽然此代码成功地将每个字符串转换为字典,但速度非常慢。我认为应该有一个更快的方法来完成这项任务。
提前感谢您的帮助或建议

您可以使用
readlines()
立即加载这个巨大的文件,然后将它连接到一个巨大的字符串中,并通过
json.loads()
进行解码

基准测试(使用包含100k Json行的文件):

在我的机器上打印(AMD 2400G,Python 3.8):


因此,此方法似乎要快得多。

这并不能回答您的问题,但您应该像枚举(data2.itertuples())中的i行那样进行枚举。。这样你就不用自己管理
i
了。谢谢你,丹尼尔。我在学习,没问题!这就是为什么我们都在这里每个json字符串都在单独的行上吗?@AndrejKesely是的。每一行都是单独的json。谢谢@Andrej。我在一个较小的文件中使用了您的代码,它的运行速度比初始代码快得多。干得好。
import json
import pandas as pd
from timeit import timeit

def f1():
    data2=pd.read_table('huge.txt', sep="\n",header=None)

    data2['dic'] = ''

    for i in range(len(data2[0])):
        data2["dic"][i] = json.loads(data2[0][i])

    return data2

def f2():
    with open('huge.txt', 'r') as r:
        l = r.readlines()

    s = '[' + ','.join(l) + ']'

    data = json.loads(s)

    return pd.DataFrame({'dic': data})

t1 = timeit(lambda: f1(), number=1)
t2 = timeit(lambda: f2(), number=1)

print(t1)
print(t2)
102.88191884600383
0.30581573898962233