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

使用 Python 在新的 .json 文件中打印每一行 json

使用 Python 在新的 .json 文件中打印每一行 json

繁华开满天机 2021-06-30 14:03:44
我有一个json文件;我需要id从内容中删除密钥,我可以用我的代码来做。现在我想json在一个新文件中打印文件的每一行,并使用 myjson中的名称作为文件名。我的json文件前:{"categories":["Test"],"indications":[{"@class":"=indication.BuildLogIndication","pattern":".*TypeError .*"},{"@class":"model.indication.BuildLogIndication","pattern":".*LoadError .*"}],"modifications":[{"time":{"$date":"2015-10-08T20:01:54.075Z"}},{"user":"user1","time":{"$date":"2015-03-04T18:38:58.123Z"}},{"user":"user2","time":{"$date":"2014-11-13T01:54:13.906Z"}},{"time":{"$date":"2014-09-02T18:48:05.000Z"}}],"lastOccurred":{"$date":"2017-01-25T20:05:17.180Z"}}{"pattern":".*look for this string.*"}],"modifications":[{"time":{"$date":"2014-09-02T18:52:20.000Z"}}],"lastOccurred":{"$date":"2014-11-04T00:43:32.945Z"},"_removed":{"timestamp":{"$date":"2014-11-13T01:52:44.346Z"},"by":"user3"},"active":false}删除id的代码:import jsonimport sysimport reimport fileinputinfile = "failure.json"outfile = "failure1.json"fin = open(infile)fout = open(outfile, "w+")for line in fin:    for word in line:        line = re.sub("\"_id.*?},","", line)    fout.write(line)    file.write("%d\n" % n)fin.close()fout.close()
查看完整描述

3 回答

?
心有法竹

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

您的示例输入json在每一行上显示一个对象。


所以我的解决方案读取每一行并将其转换为python dict(使用json.loads()),从dict(使用dict.pop()如果键不存在静默失败)中删除所需的键并将其转换回字符串(使用json.dumps()),然后将其写入新文件。


import json


infile = "failure.json"

outfile = "failure1.json"

key = '_id'


with open(infile) as f_read:

    with open(outfile, 'w') as f_write:

        for line in f_read:

            line = line.strip()

            if len(line) > 0:

                try:

                    elem = json.loads(line)

                    elem.pop(key, None)

                    f_write.write('{}\n'.format(json.dumps(elem)))

                except json.JSONDecodeError:

                    pass

编辑:json根据 OP 的评论,显然每一行都应该进入一个单独的新文件。可以这样做,例如:


import json


infile = "failure.json"

key_to_remove = '_id'


with open(infile) as f_read:

    for line in f_read:

        line = line.strip()

        if len(line) > 0:

            try:

                elem = json.loads(line)

                elem.pop(key_to_remove, None)


                outfile = '{}.json'.format(elem['name'])      # this may raise KeyError

                with open(outfile, 'w') as f_write:

                    f_write.write('{}\n'.format(json.dumps(elem)))

            except json.JSONDecodeError:

                pass


查看完整回答
反对 回复 2021-07-06
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

对于删除,你可以使用这样的东西:


import json

import sys

import re

import fileinput


with open('failure.json') as data_file:

    data = json.load(data_file)

    del data['_id']



with open('failure2.json', 'w') as data_file:

    data = json.dump(data, data_file)

并且为了创建具有 id 值的文件,只需解析data对象和id节点值


查看完整回答
反对 回复 2021-07-06
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

您已导入该json包,但并未使用它。你应该,这很棒。

从文件中获取字符串,然后用于json.loads()将字符串加载到 json 对象中。从那里,您可以使用 .json 获取 json 对象的每个元素for key in json_object


查看完整回答
反对 回复 2021-07-06
  • 3 回答
  • 0 关注
  • 289 浏览
慕课专栏
更多

添加回答

举报

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