找到一种在嵌套python列表中搜索的有效方法

时间:2015-08-31 06:56:13

标签: python excel

我是这个论坛的新手,我基本上是一名网络工程师,学习Python来自动执行某些任务并使我的工作更有效率。好吧,直截了当。我有一张4张大的excel工作簿,每张大约有50K行。在学习了几周并进行了大量搜索之后,我能够将整个excel单元格值加载到嵌套列表中,例如

list [sheet_index][row_index][column_index]. 

现在获得输入后,下一部分是对这些数据的操纵。我的任务是从每一行中找到特定的列值并在整个工作簿中进行搜索,如果找到,则应该将来自不同列的相应数据与原始搜索对象一致。

我的方法如下:

  

将单元格值放在一个大列表中(如前所述)   将该列表在不同的变量中展平为一维列表。   在循环中,从行(固定列)获取特定值并在整个一维列表中搜索(如果找到),将相应的值写入不同的excel文件中。

到目前为止,这种方法工作正常,延迟时间过长,这是从Excel VBA程序漂移到Python的动机。所以,我在这里向专家询问是否有一些非常基本的东西我不知道了。以下是代码:

import xlrd
import xlwt
from compiler.ast import flatten

datafile = 'Peering_DB.xls'
# Data Read Function Definition
def main(datafile):
wb = xlrd.open_workbook(datafile)
wwb =  copy(wb)
data = [[[wb.sheet_by_index(i).cell_value(r, col)
    for col in range(wb.sheet_by_index(i).ncols)]
        for r in range(wb.sheet_by_index(i).nrows)]
            for i in range(0,4)]

data1 = flatten(data)

k = 2
x = 0

while x < 4:
    r = wb.sheet_by_index(x).nrows
    A = data[x][k][1]
    B = data[x][k][2]
    counter = 4
    loc = [loc for (loc , e ) in enumerate(data1) if e == A]
    if len(loc) != 1:
        for n in range(len(loc)):
            if  data1[loc[n] + 1] != B:
                wwb.get_sheet(x).write(k,counter,data1[loc[n] + 1])
                counter = counter + 1
    else:
        wwb.get_sheet(x).write(k,counter,"No Backup")

    k = k + 1

    if  k == r - 1  and x < 3:
        print 'Page number ', x , 'Completed'
        x = x + 1
        k = 2
    elif k == r and x == 3:
        print "Operation Completed Successfully"
        break


wwb.save('Peering_output.xls')  

主(数据文件)

0 个答案:

没有答案