如何使用python将txt文件转换成json?

新手上路,请多包涵

我正在使用 python 编写日志文件,日志文件是这样的:

 MessageName:mouse left down | TimeStamp:2019-02-13 15:43:31.664 |  Window:13500784 | Position:(483, 587) | Wheel:0
MessageName:mouse left up | TimeStamp:2019-02-13 15:43:31.873 | Window:13500784 | Position:(483, 587) | Wheel:0

我想将此日志转换为 json 格式。

这是我试过的代码:

 import json

def convert() :
f = open("log_events.log", "r")
content = f.read()
splitcontent = content.splitlines()

for line in splitcontent :
    pipesplit = line.split(' | ')
    print(pipesplit)
    with open("json_log.json", 'a') as fout:
        json.dump(pipesplit, fout, indent=4)

我需要的输出是这样的:

 [
{
    "MessageName" : "mouse left down",
    "TimeStamp" : "2019-02-13 15:43:31.664",
    "Window" : "13500784",
    "Position" : "(483, 587)",
    "Wheel" : 0"
},
{
    "MessageName" : "mouse left up",
    "TimeStamp" : "2019-02-13 15:43:31.873",
    "Window" : "13500784",
    "Position" : "(483, 587)",
    "Wheel" : "0"
},

]

但是使用上面给出的代码,我的输出是

[
    "MessageName" : "mouse left down",
    "TimeStamp" : "2019-02-13 15:43:31.664",
    "Window" : "13500784",
    "Position" : "(483, 587)",
    "Wheel" : 0"
][
    "MessageName" : "mouse left up",
    "TimeStamp" : "2019-02-13 15:43:31.873",
    "Window" : "13500784",
    "Position" : "(483, 587)",
    "Wheel" : "0"
]

如何转换成正确的 JSON 格式?

原文由 Sudeep 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

您需要为每一行添加额外的处理,将字符串转换为键值对,然后将该对添加到字典中。

此外,您只需要打开一次 JSON 文件并写入整个数据结构:

 import json

def line_to_dict(split_Line):
    # Assumes that the first ':' in a line
    # is always the key:value separator

    line_dict = {}
    for part in split_Line:
        key, value = part.split(":", maxsplit=1)
        line_dict[key] = value

    return line_dict

def convert() :
    f = open("log_events.log", "r")
    content = f.read()
    splitcontent = content.splitlines()

    # Split each line by pipe
    lines = [line.split(' | ') for line in splitcontent]

    # Convert each line to dict
    lines = [line_to_dict(l) for l in lines]

    # Output JSON
    with open("json_log.json", 'w') as fout:
        json.dump(lines, fout, indent=4)

原文由 jfowkes 发布,翻译遵循 CC BY-SA 4.0 许可协议

你在哪里大多是正确的。你没有做的是生成 dict s。

  1. split 第一次出现 :
  2. 将每个字典添加到列表中
  3. dump 他们进入你的 .json

神奇之处在于这一行:

d.append(dict(s.split(':',1) for s in l))

换句话说:在第一次出现 : 时拆分每个元素 --- 中的每个元素 l 然后将它们放入字典并将它们附加到列表 d

工作示例:

 import json

f = open("log.file", "r")
content = f.read()
splitcontent = content.splitlines()

d = []
for v in splitcontent:
    l = v.split(' | ')
    d.append(dict(s.split(':',1) for s in l))

with open("json_log.json", 'w') as file:
    file.write((json.dumps(d, indent=4, sort_keys= False)))

输出:

 [
    {
        "MessageName": "mouse left down",
        "TimeStamp": "2019-02-13 15:43:31.664",
        " Window": "13500784",
        "Position": "(483, 587)",
        "Wheel": "0"
    },
    {
        "MessageName": "mouse left up",
        "TimeStamp": "2019-02-13 15:43:31.873",
        "Window": "13500784",
        "Position": "(483, 587)",
        "Wheel": "0"
    }
]

原文由 blkpingu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题