我是这个论坛的新手,我基本上是一名网络工程师,学习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')
主(数据文件)