从函数外返回列表集:python
方法从函数外返回列表集:python,python,list,append,return-value,xlrd,Python,List,Append,Return Value,Xlrd,方法collectInfoFromXLS()从给定的XLS文件中提取引号(“”)下的所有内容,并放入列表中 class ExtractInfo(object): def collectInfoFromXLS(): workbookPath = config.get('TestCaseFileURL','XLSpath') workbook = xlrd.open_workbook(workbookPath) SheetPath = con
collectInfoFromXLS()
从给定的XLS文件中提取引号(“”)
下的所有内容,并放入列表中
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
我想从类外调用这个方法,比如
Classobject = ExtractInfo(object)
print Classobject.collectInfoFromXLS()
这样我就可以得到每一行,就像print
inside方法一样,
我不想将rows2
追加到另一个列表中,因为这会在检索时产生问题。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
一种更先进的技术是将您的方法转换为生成器函数,并逐个生成行。你仍然会重复这个方法。要使函数成为生成器,请使用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
现在才Classobject.collectInfoFromXLS()
返回一个生成器对象而不是列表,并且您只能在该对象上循环一次。您的问题是什么?@DanielRoseman:他想神奇地返回列表序列而不创建序列。确切地说是@MartijnPieters
for row in Classobject.collectInfoFromXLS():
print row
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