序列化循环的结果

时间:2016-03-30 21:03:12

标签: python python-2.7

代码段:

import xlrd

wb = xlrd.open_workbook("links.xls")
sh = wb.sheet_by_index(0)

count = 0
for row in range(1, sh.nrows):
    val = sh.row_values(row)


    if (val[4]) != 2:
        print 'id',str(int(val[0])), 'value', str(int(val[1])) + "-" + str(int(val[2]))

    else:
        print 'id',str(int(val[0])), 'value', str(int(val[1])) + "-" + str(int(val[2]))
        print 'id',str(int(val[0])), 'value', str(int(val[2])) + "-" + str(int(val[1]))

links.xls

   id From To   Len  Permlanes
    1   1   7   350   9
    2   1   8   460   3
    3   1   3   490   2
    4   2   9   220   2
    5   2   7   540   1
    6   2   8   590   1
    7   3   6   250   1
    8   4   4   290   6
    9   4   9   570   1
    10  4   2   430   1

输出:

id 1 value 1-7
id 2 value 1-8
id 3 value 1-3
id 3 value 3-1
id 4 value 2-9
id 4 value 9-2
id 5 value 2-7
id 6 value 2-8
id 7 value 3-6
id 8 value 4-4
id 9 value 4-9
id 10 value 4-2

预期输出:

id 1 value 1-7
id 2 value 1-8
id 3 value 1-3
id 4 value 3-1
id 5 value 2-9
id 6 value 9-2
id 7 value 2-7
id 8 value 2-8
id 9 value 3-6
id 10 value 4-4
id 11 value 4-9
id 12 value 4-2

上面的代码是我正在处理的项目的一个小描述。当excel文件中的permlanes fields is 2时,value以备用模式写入两次,即1-3 and 3-1,但id输出不符合预期。有人可以帮助我调整代码,以便id output是串行的(就像在预期的输出中一样),而不是在当前输出中出现。我尝试循环使用excel文件元素列表的索引显然不起作用,因为无法访问excel文件的元素。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

我看到你有未使用的count变量,所以我用它来跟踪输出索引,每当我们打印一个新的id时就增加它。

import xlrd

wb = xlrd.open_workbook("links.xls")
sh = wb.sheet_by_index(0)

count = 1
for row in range(1, sh.nrows):
    val = sh.row_values(row)

    if (val[4]) != 2:
        print 'id',str(int(count)), 'value', str(int(val[1])) + "-" + str(int(val[2]))
    else:
        print 'id',str(int(count)), 'value', str(int(val[1])) + "-" + str(int(val[2]))
        count+=1
        print 'id',str(int(count)), 'value', str(int(val[2])) + "-" + str(int(val[1]))
    count+=1