如何在Python中打开 .ndjson 文件?

6

我有一个大小为20GB的.ndjson文件,希望使用Python打开。由于文件太大,我找到了一种方法,使用一个在线工具将其分成50个部分。这是该工具的网址:https://pinetools.com/split-files

现在我得到了一个扩展名为.ndjson.000的文件(我不知道是什么)。

我试图将它作为json或csv文件打开,并在Pandas中读取,但无法成功。您有任何解决方法吗?

import json
import pandas as pd

第一种方法:

df = pd.read_json('dump.ndjson.000', lines=True)

错误: ValueError: 解码 'string' 时未匹配 ''"'

第二种方法:

with open('dump.ndjson.000', 'r') as f:

     my_data = f.read() 

print(my_data)

错误:json.decoder.JSONDecodeError: 从第1行第104925061列(第104925060个字符)开始的未终止字符串

我认为问题在于我的文件中有一些表情符号,所以我不知道如何对它们进行编码?

3个回答

12

现在可以通过参数 lines=True 直接支持 ndjson 格式。

import pandas as pd

df = pd.read_json('/path/to/records.ndjson', lines=True)
df.to_json('/path/to/export.ndjson', lines=True)

未来警告:将字面json传递给'read_json'已被弃用,并将在将来的版本中删除。要从字面字符串中读取,请将其包装在'StringIO'对象中。 - undefined

5

我认为pandas.read_json无法正确处理ndjson。

根据这个问题,您可以像这样做来读取它。

import ujson as json
import pandas as pd

records = map(json.loads, open('/path/to/records.ndjson'))
df = pd.DataFrame.from_records(records)

P.S:此代码所有权归Github问题中的KristianHolsheimer


在这一行代码中:df = pd.DataFrame.from_records(records),我遇到了这个错误:ValueError: Unmatched ''"' when when decoding 'string'。 - taga
我需要添加任何编码吗?因为我的文件中可能有一些表情符号或特殊字符。 - taga
关于这个问题,我还有一个问题,是否有一种方法可以在上传文件时添加某种进度条,因为文件太大了,我想知道还剩多少时间或已上传文件的百分比? - taga

2

ndjson(newline delimited json)是一种json-lines格式,即每行都是一个json。它非常适合数据集缺乏严格结构(“非SQL”)且文件大小足够大以需要多个文件的情况。

您可以使用pandas:

import pandas as pd
data = pd.read_json('dump.ndjson.000', lines=True)

如果您的JSON字符串中不包含换行符,您也可以使用以下方式:

import json
with open("dump.ndjson.000") as f:
    data = [json.loads(l) for l in f.readlines()]

如果JSON字符串包含换行符会怎么样?这将破坏数据。 - Fusion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接