解析文本文件并转换为json并从循环中追加数据

2024-04-26 13:30:04 发布

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

我有一个场景,其中我正在运行生成文本文件(demo.txt)数据的命令,如下所示:

{
  "id" : "aaaaaaaabhikz75nc3wkao54xhuv245ye6zmjhcecralymbjo3hhvh5qtugq",
  "name" : "zsssd",
  "description" : "testfiler",
  "ticket" : null,
  "cId" : "yu2tiwguc45t6t5ej25pfzpevfhpcbbjjxjjvw6wa",
  "createdBy" : null,
  "timeCreated" : null
}{
  "id" : "aaaaaaaabhikz75nc3wkao54xhuv245ye",
  "name" : "klsssd",
  "description" : "testfiler2",
  "ticket" : null,
  "cId" : "yu2tiwguc456wa",
  "createdBy" : null,
  "timeCreated" : 107635378859
}

我想将其转换为json,提取有关名称的信息,并在每个循环中运行时向其追加flp(请参阅下面的代码)值,并将其存储在dict中

下面是我尝试过的

flp = ["modeltf","modeltz"]
for r in flp:
    res = subprocess.call(['java', '-jar','dem.jar', 'dataname', '-o', 'demo.txt', '-f', r])
    with open('demo.txt') as in, with open('demo.json','w') as out:
         json_string = json.dumps(in, default=lambda o: o.__dict__, sort_keys=True, indent=2)

这并没有像预期的那样起作用,任何线索都会很好

所需结果:[{"name" : "zsssd", "flp" : "modeltf"}, {"name" : "klsssd", "flp" : "modeltz"}]

第一个循环为modeltf运行,下一个循环为modeltz运行

谢谢

编辑

flp = ["modeltf","modeltz"]
for r in flp:
    res = subprocess.call(['java', '-jar','dem.jar', 'dataname', '-o', 'demo.txt', '-f', r])
    with open("namespaces.txt") as f:
        demo = f.read().replace("\n","")
        records = re.findall(r"\{[^\}]*\}", demo)
        dictionaries = [json.loads(r) for r in records] # this creates the dictonary out of the demo.txt file.

现在,我尝试从列表字典中获取名称,并尝试将其与flp项映射以获得此结果。 [{"name" : "zsssd", "flp" : "modeltf"}, {"name" : "klsssd", "flp" : "modeltz"}]

使用:

results = [{"name": name, "flp": flp} for name,flp in zip(names, flp)]

但它不会循环遍历完整的数据,只输出第一个dict项


Tags: nameintxtjsonfordemowithnull
1条回答
网友
1楼 · 发布于 2024-04-26 13:30:04
import re
import json

results = []

flp = ["modeltf","modeltz"]
for r in flp:
    res = subprocess.call(['java', '-jar','dem.jar', 'dataname', '-o', 'demo.txt', '-f', r])
    with open("namespaces.txt") as f:
        demo = f.read().replace("\n","")
        records = re.findall(r"\{[^\}]*\}", demo)
        dictionaries = [json.loads(r) for r in records] # this creates the dictonary out of the demo.txt file.

        for dictionary in dictionaries:

            # option 1, return dictionaries with only 'name' and 'flp' keys
            # 
            result = {"name": dictionary.get(name), "flp": r}
            results.append(result)

            # option 2, return the dictionaries with all the keys
            # 
            # dictionary["flp"] = r
            # results.append(dictionary)

相关问题 更多 >