Python - 将文本文件转换为dict并转换为json

时间:2017-01-04 19:56:30

标签: python json dictionary

如何将此文本文件转换为json?最后,我将json blob插入NoSQL数据库,但是现在我计划解析文本文件并构建一个python dict,然后转储到json。

我认为必须有一种方法可以通过词典理解来实现这一点,我只是没有看到/关注(我是python的新手)。

文件示例:

file_1.txt
[namespace1] => metric_A = value1
[namespace1] => metric_B = value2
[namespace2] => metric_A = value3
[namespace2] => metric_B = value4
[namespace2] => metric_B = value5

我要构建转换为json的dict示例:

{  "file1" : {
             "namespace1" : {
                 "metric_A" : "value_1",
                 "metric_B" : "value_2"     
             },
             "namespace2" : {
                 "metric_A" : "value_3",
                 "metric_B" : ["value4", "value5"]
             }
}

我目前有这个工作,但我的代码是一个完全混乱(并且比这个例子更复杂w /清理等)。我基本上会逐行浏览文件,构建一个python dict。我在dict中检查每个命名空间是否存在,如果存在,我检查指标。如果度量已经存在,我知道我有重复项,需要将值转换为包含现有值和新值的数组。必须有一个更简单/干净的方式。

2 个答案:

答案 0 :(得分:2)

import glob
import json

answer = {}
for fname in glob.glob(file_*.txt):  # loop over all filenames
    answer[fname] = {}
    with open(fname) as infile:
        for line in infile:
            line = line.strip()
            if not line: continue
            splits = line.split()[::2]
            splits[0] = splits[0][1:-1]
            namespace, metric, value = splits  # all the values in the line that we're interested in
            answer[fname].get(namespace, {})[metric] = value  # populate the dict

required_json = json.dumps(answer)  # turn the dict into proper JSON

答案 1 :(得分:1)

您可以使用正则表达式。 re.findall('\w+', line)将找到您所追求的所有文本组,然后其余文本组将其保存在字典字典中。最简单的方法是使用defaultdict中的collections

import re

from collections import defaultdict

answer = defaultdict(lambda: defaultdict(lambda: []))

with open('file_1.txt', 'r') as f:
    for line in f:
        namespace, metric, value = re.findall(r'\w+', line)
        answer[namespace][metric].append(value)

如我们所知,我们期望正好有3个alphanum组,我们将其分配给3个变量,即namespace, metric, value。最后,当我们第一次看到命名空间时,defaultdict将返回defaultdict,而内部defaultdict将返回第一个追加的空数组,使代码更紧凑。