-1

メソッドは、指定された XLS ファイルからcollectInfoFromXLS()下にあるすべてのコンテンツを抽出し、 .quotes ('')List

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()

メソッド内とまったく同じようにすべての行を取得できるように、取得中に問題が発生するため、もう1つのリスト内printに追加したくありません。rows2

4

1 に答える 1

1

Python メソッドは、一度に1 つの結果のみを返すことができます。

その 1 つの結果リストのリストになる場合があります。より大きなリストを返し、結果をループします。

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

より高度な手法は、メソッドをジェネレーター関数に変換し、行を 1 つずつ生成することです。あなたはまだメソッドをループします。関数をジェネレーターにするには、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()リストの代わりにジェネレーターオブジェクトを返すようになり、そのオブジェクトを一度だけループできます。

于 2013-10-22T07:34:07.873 に答える