用Python替换JSON文件中的字符。由于文件太大(超过1 GB),编辑出现问题

2024-10-16 20:42:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很大的JSON文件(通过Azure数据工厂导出)。如果DataFactory发现问题,它会在对象之间添加$符号。例如,它看起来像这样:

<br>{...}<br>
{...}<br>
{...}${...}<br>

所以我有一个错误,例如json.decoder.JSONDecodeError: Extra data: line 1 column 21994 (char 21993)

我用一种简单的方法处理它—notepad++替换$to\n,它很好;),但是现在我的文件大约是1.3 GB,我没有工具来编辑这么大的文件。你知道吗

我使用python从文件中的所有JSON对象导出数据,并将它们导出到XMLs。你知道吗

现在,我正在寻找一些解决方案,将所有$符号替换为换行符\n,并清理文件。你知道吗

我的代码开头是:

a = open('test.json', 'r', encoding = 'UTF8')
data1 = a.readlines()
a.close()

for i in range(len(data1)):
    print('Done%d/%d'%(i,len(data1)))
    jsI = json.loads(data1[i])

如果文件出现$符号,那么它就结束了。你知道吗

关于如何使用Python在文件中用换行符替换$符号,我可以请教一些建议吗?你知道吗


Tags: 文件数据对象brjsonlen工厂错误
2条回答

为了能够处理JSON对象中字符串中可能的$字符,您可以将输入字符串data1$拆分为片段,将片段逐个连接到一个字符串中,直到它可以解析为JSON为止,此时输出该字符串并清除它以转到下一个片段:

import json
candidate = ''
for fragment in data1.split('$'):
    candidate += fragment
    try:
        json.loads(candidate)
        print(candidate)
        candidate = ''
    except json.decoder.JSONDecodeError:
        candidate += '$'
        continue

例如,给定data1 = '''{}${"a":"$"}${"b":{"c":2}}''',这将输出:

{}
{"a":"$"}
{"b":{"c":2}}

问题可能出在a.readlines(),因为它会将整个文件带到内存中。在处理大型文件时,逐行阅读会更有趣,如下所示:

with open(fname) as f: 
    for line in f:
        # Do your magic here, on this loop
# No need to close it, since the `with` will take care of that.

如果您的目标是用\n替换每个$,则如下所示:

with open(fname, "r+") as f: 
    for line in f:
        line.replace("$", "\n")

相关问题 更多 >