我有一个无序的dict / json数据对象。事实上,我在文件中逐行排列了许多。每个键中有三个键/对象。我永远不知道三个中的哪一个有我需要添加的数据直接回到另外两个。我无法控制数据的初始编写方式,无论我喜不喜欢。
目前,我遍历三个键/对象中的每一个,直到找到具有我需要的字段的正确键。然后我将它们保存到变量中。现在,我如何回到我可能已经迭代过的其他两个键/对象上并将字段和值添加回其中?正如我所说,这些文件中有多个来自文件所以如果我不重复那么它会继续下一个文件吗?
代码:
with open(inputfile) as f:
for line in f:
try:
# File is one big json object per line. Load up the current line as JSON.
line = json.loads(line)
for result in line['scan_result']:
# Check if this object's filename field has the extra data I need to parse out and palce in t he others.
if "meta_data" in file_result['filename']:
print "FOUND METADATA"
#print result['filename']
regmatch = re.match(".*meta_data_(.+?)_(.+?):(.+?)$", file_result['filename'])
if regmatch:
print "REG MATCH -------------"
#print regmatch.groups()
timecreated = regmatch.group(1)
author = regmatch.group(2)
mime_type = regmatch.group(3)
正如您所看到的,我已将数据撤出。我只需要弄清楚如何将它放回到我刚刚迭代过的JSON对象中。我可以通过其他方式做到这一点。也许先排序对象然后再运行它?
如果有帮助,数据结构如下所示。但是从来不知道父母的顺序。这是一个" line" (json对象)在文件中:
{
"filename": abc.gif
id : 13241
parent : 999
interesting_file_stuff : {
stuff : 123
stuff2 : 456
}
}
{
"filename": hello.zip+meta_data_stuff_here
id : 999
parent : NA
interesting_file_stuff : {
stuff : 5435
stuff2 : 24223
}
}
{
"filename": xyz.exe
id : 8342
parent : 999
interesting_file_stuff : {
stuff : 2
stuff2 : 3232
}
}
答案 0 :(得分:1)
在循环时添加一个额外的布尔值。 你可以有一个额外的循环,它是True,重复直到你使用break语句,然后外循环将增加到下一个值。
{{1}}
答案 1 :(得分:0)
看起来循环不能倒退,所以我必须使用while循环手动循环,完全控制迭代以及我走的路。