为了账号安全,请及时绑定邮箱和手机立即绑定

用 Python 替换 JSON 文件中的字符。由于大文件(超过 1 GB)而导致编辑问题

用 Python 替换 JSON 文件中的字符。由于大文件(超过 1 GB)而导致编辑问题

aluckdog 2021-10-26 13:35:29
我创建了一个小脚本来比较两个图像的相似程度。这包含在一个名为 的文件中compare_image.py,该文件仅包含一个函数compare. 该文件位于应用程序目录中。我正在尝试models.py使用该行从文件中导入它import compare_image,但尝试此操作会导致出现错误消息ModuleNotFoundError: No module named 'compare_image'。简化的目录结构如下所示:myproject└── myapp    ├── __init__.py    ├── admin.py    ├── apps.py    ├── compare_image.py    ├── forms.py    ├── models.py    ├── tests.py    ├── urls.py    └── views.pymyapp是项目中唯一的应用程序。除此之外,webapp 运行良好。我试图删除并重新touch荷兰国际集团的__init__.py文件都无济于事。我可以compare_image从myapp目录中的 python shell导入。唯一的导入compare_image.py是 PIL 或标准库,所以我不认为循环导入是罪魁祸首。一种解决方案是将代码放入 中models.py,但我不想弄乱这个文件。我想既然这个错误看起来很基本,那么 Django 中用户编写的脚本可能有一些标准机制,但我在网上找不到任何提及。如果能让事情更清楚,我很乐意提供有关该项目的更多详细信息。在此先感谢您的帮助(这个错误让我发疯了!)
查看完整描述

2 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

问题可能是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.

如果您的目标是$用 a替换 each \n,它将是这样的:


with open(fname, "r+") as f: 

    for line in f:

        line.replace("$", "\n")


查看完整回答
反对 回复 2021-10-26
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

为了能够处理可能的$字符的字符串中的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}}


查看完整回答
反对 回复 2021-10-26
  • 2 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信