2013-10-22 44 views
-1

方法collectInfoFromXLS()从给定的XLS文件中提取quotes ('')下的所有内容,并放入Listreturn从函数外返回的一组列表:python

class ExtractInfo(object): 

    def collectInfoFromXLS(): 
     workbookPath = config.get('TestCaseFileURL','XLSpath') 
     workbook = xlrd.open_workbook(workbookPath) 
     SheetPath = config.get('TesCaseSheetName','Sheet1') 
     worksheet = workbook.sheet_by_name(SheetPath) 
     numOfRows = worksheet.nrows - 1 
     curr_row = 0 
     row1 = [] 
     row2 = [] 
     while curr_row < numOfRows: 
      curr_row += 1 
      row2 = [] 
      row = worksheet.row(curr_row) 
      for value2 in re.findall(r"'(.*?)'", str(row)): 
       row2.append(value2) 
      return row2 

我得到这个方法的输出,当我打印row2就像

['', 'MUC-EC-099_SC-Memory-01_TC-1', 'Description1.', '', '', '', '', '', '', '', '', '', '', '', ''] 
['', 'MUC-EC-099_SC-Memory-01_TC-2', 'Description2', '', '', '', '', '', '', '', '', '', '', '', ''] 
...... 

我想打电话从外部类这种方法,像

Classobject = ExtractInfo(object) 
print Classobject.collectInfoFromXLS() 

,这样我可以里面的方法得到每一行像print, 我不想在012里面追加rows2里面的一个列表,检索。

+0

你的问题是什么? –

+0

@DanielRoseman:他想要在不创建序列的情况下奇迹般地返回一系列列表。 –

+0

正是@MartijnPieters – WEshruth

回答

1

Python方法一次只能返回一个结果。

那一结果可以是列表的列表;只返回一个更大的列表,循环了结果:

result = [] 
row2 = [] 
while curr_row < numOfRows: 
    curr_row += 1 
    row2 = [] 
    row = worksheet.row(curr_row) 
    for value2 in re.findall(r"'(.*?)'", str(row)): 
     row2.append(value2) 
    result.append(row2) 
return result 

和:

for row in Classobject.collectInfoFromXLS(): 
    print row 

更高级的技术是把你方法变成发电机的功能,并产生行,逐个。您仍然会循环使用该方法。要使该函数成为发生器,请使用yield表达式;你可以不再使用return与价值,一旦你让一台发电机:

def collectInfoFromXLS(): 
    workbookPath = config.get('TestCaseFileURL','XLSpath') 
    workbook = xlrd.open_workbook(workbookPath) 
    SheetPath = config.get('TesCaseSheetName','Sheet1') 
    worksheet = workbook.sheet_by_name(SheetPath) 
    numOfRows = worksheet.nrows - 1 
    curr_row = 0 
    row2 = [] 
    while curr_row < numOfRows: 
     curr_row += 1 
     row2 = [] 
     row = worksheet.row(curr_row) 
     for value2 in re.findall(r"'(.*?)'", str(row)): 
      row2.append(value2) 
     yield row2 

仍然必须遍历输出:

for row in Classobject.collectInfoFromXLS(): 
    print row 

现在才Classobject.collectInfoFromXLS()返回一个发电机对象,而不是一个列表,并且你可以遍历该对象一次。