当我尝试用python读取Json文件和文本文件时循环不起作用

时间:2015-08-21 21:07:43

标签: python json

我有一个带有对象的json文件和一个包含多个组的文本文件(每个组有5个数字,我以这种方式将它们放在列表中:每个组的第一个数字在列表1中,每个组的第二个数字,在列表2等)。我基本上必须将json的每个对象与我创建的每个组匹配。问题是我得到了Json的最后一个元素。文本文件中的组以正确的方式创建。

这是我的代码:

import json

NUM_LIST = 5
index = 0

def report(a, b, c, d, e, index):
    json_file = 'json_global.json'
    json_data = open(json_file)
    data = json.load(json_data)

    i = 0
    index = 0
    item = 0
    cmd = " "
    ind = 0

    for node in data:
        for i in range(0, 5):
            item = data[i]['item']
            cmd = data[i]['command']

        index+= 1

     print  item, cmd, a, b, c, d, e

f = open("Output.txt", "r")
lines = [line.rstrip() for line in f if line != "\n"]

NUM_LISTS = 5
groups = [[] for i in range(NUM_LISTS)]
listIndex = 0

for line in lines:
    if "Transactions/Sec for Group" not in line:
        groups[listIndex].append(float(line))
        listIndex += 1
        if listIndex == NUM_LISTS:
            listIndex = 0

value0 = groups[0]
value1 = groups[1]
value2 = groups[2]
value3 = groups[3]
value4 = groups[4]

for i in range(0, 5):
    a = value0[i]
    b = value1[i]
    c = value2[i]
    d = value3[i]    
    e = value4[i]
    i += 1

    report(a, b, c, d, e, index)

Json文件如下所示:

[
  {
    "item": 1,
    "command": "AA"
  },
  {
    "item": 2,
    "command":   "BB",
  },
  {
    "item": 3,
    "command":   "CC",
  },
  {
    "item": 4,
    "command":   "DD",
  },
  {
    "item": 5,
    "command":   "EE",
  }
]

文本文件如下所示:

Transactions/Sec for Group = AA\CODE1\KK
1011.5032
2444.8864
2646.6893
2740.8531
2683.8178
Transactions/Sec for Group = BB\CODE1\KK
993.2360
2652.8784
3020.2740
2956.5260
3015.5910
Transactions/Sec for Group = CC\CODE1\KK
1179.5766
3271.5700
4588.2059
4174.6358
4452.6785
Transactions/Sec for Group = DD\CODE1\KK
1112.2567
3147.1466
4014.8404
3913.3806
3939.0626
Transactions/Sec for Group = EE\CODE1\KK
1205.8499
3364.8987
4401.1702
4747.4354
4765.7614

程序正文中的逻辑运行正常。组显示正常,但是不是从Json文件中获得1到5的列表,而是使用数字5命令EE显示所有内容。相反应该出现:项目1,2,3,4,5及其命令

我的清单1将包含数字:1011.5032,993.2360,1179.5766,1112.2567,1205.8499。 我的清单2将有数字:2444.8864,2652.8784,3271.5700,3147.1466, 我使用的python版本是2.6

2 个答案:

答案 0 :(得分:0)

根据你的解释,你很难说你要做什么 - 你的意思是下面的嵌套循环吗?内部循环执行5次,但在每次迭代中,它都会覆盖itemcmd的先前值。

for node in data:
    for i in range(0, 5):
        item = data[i]['item']
        cmd = data[i]['command']

    index+= 1

每次执行内循环时尝试打印值:

for node in data:
    for i in range(0, 5):
        item = data[i]['item']
        cmd = data[i]['command']
        print  item, cmd


    index+= 1

答案 1 :(得分:0)

我认为这段代码是你的问题:

for node in data:
    for i in range(0, 5):
        item = data[i]['item']
        cmd = data[i]['command']

项目将始终为“5”,执行后命令将始终为“EE”。也许你的缩进是关闭它下面的代码,并且该代码应该在循环内?