用python读取工作簿中的条目

2024-09-28 01:29:11 发布

您现在位置:Python中文网/ 问答频道 /正文

在所附的代码中,我有一个矩阵如下:
guyprefers={
'bob':['abi'、'dee'、'fay'、'bea'、'jan'],
'gav':['abi'、'bea'、'dee'、'jan'、'fay'],
'ian':['bea'、'dee'、'abi'、'fay'、'jan'],
'jon':['bea'、'abi'、'fay'、'jan'、'dee']}

我想从工作表上读一下上面的矩阵首选项.xls 首选项.xls如下所示: 鲍勃·阿比·迪·费比·詹
加夫·阿比·比比·迪·詹·费比
伊恩·比迪·阿比·费扬
乔恩比阿比费詹迪

然后产生结果。我试图替换矩阵行1,如下所示:
'工作表.cell(0,0)。值':['工作表.cell(0,1)。值,'工作表.cell(0,2).值','工作表.cell(0,3).值','工作表.cell(0,4).值','工作表.cell(0,5).值'],
但它显示出错误。代码哪里出错了?你知道吗

import copy import xlrd import xlwt workbook = xlrd.open_workbook('preferences.xls') worksheet = workbook.sheet_by_name('guys') guyprefers = { 'bob': ['abi', 'dee', 'fay', 'bea', 'jan'], 'gav': ['abi', 'bea', 'dee', 'jan', 'fay'], 'ian': ['bea', 'dee', 'abi', 'fay', 'jan'], 'jon': ['bea', 'abi', 'fay', 'jan', 'dee']} galprefers = { 'abi': ['gav', 'bob', 'jon', 'ian'], 'bea': ['bob', 'gav', 'jon', 'ian'], 'dee': ['jon', 'ian', 'gav', 'bob'], 'fay': ['bob', 'ian', 'jon', 'gav'], 'jan': ['gav', 'bob', 'jon', 'ian']} guys = sorted(guyprefers.keys()) gals = sorted(galprefers.keys()) def check(engaged): inverseengaged = dict((v,k) for k,v in engaged.items()) for she, he in engaged.items(): shelikes = galprefers[she] shelikesbetter = shelikes[:shelikes.index(he)] helikes = guyprefers[he] helikesbetter = helikes[:helikes.index(she)] for guy in shelikesbetter: guysgirl = inverseengaged[guy] guylikes = guyprefers[guy] if guylikes.index(guysgirl) > guylikes.index(she): print("%s and %s like each other better than " "their present partners: %s and %s, respectively" % (she, guy, he, guysgirl)) return False for gal in helikesbetter: girlsguy = engaged[gal] gallikes = galprefers[gal] if gallikes.index(girlsguy) > gallikes.index(he): print("%s and %s like each other better than " "their present partners: %s and %s, respectively" % (he, gal, she, girlsguy)) return False return True def matchmaker(): guysfree = guys[:] engaged = {} guyprefers2 = copy.deepcopy(guyprefers) galprefers2 = copy.deepcopy(galprefers) while guysfree: guy = guysfree.pop(0) guyslist = guyprefers2[guy] gal = guyslist.pop(0) fiance = engaged.get(gal) if not fiance: # She's free engaged[gal] = guy print(" %s and %s" % (guy, gal)) else: # The bounder proposes to an engaged lass! galslist = galprefers2[gal] if galslist.index(fiance) > galslist.index(guy): # She prefers new guy engaged[gal] = guy print(" %s dumped %s for %s" % (gal, fiance, guy)) if guyprefers2[fiance]: # Ex has more girls to try guysfree.append(fiance) else: # She is faithful to old fiance if guyslist: # Look again guysfree.append(guy) return engaged print('\nEngagements:') engaged = matchmaker() print('\nCouples:') print(' ' + ',\n '.join('%s is engaged to %s' % couple for couple in sorted(engaged.items()))) print() print('Engagement stability check PASSED' if check(engaged) else 'Engagement stability check FAILED')

Tags: indexifjanbobgaldeeprintjon
1条回答
网友
1楼 · 发布于 2024-09-28 01:29:11

我相信您正在尝试使用'worksheet.cell(0, 0).value'检索值"bob"。你知道吗

但是,由于使用引号,'worksheet.cell(0, 0).value'被解释为字符串文字,并且不会解析为"bob"。如果去掉单引号,它将按您希望的方式工作。你知道吗

例如,下面的代码可以替换guyprefers的代码:

guyprefers = {
worksheet.cell(0, 0).value: [worksheet.cell(0, 1).value, worksheet.cell(0, 2).value, worksheet.cell(0, 3).value, worksheet.cell(0, 4).value, worksheet.cell(0, 5).value],
worksheet.cell(1, 0).value: [worksheet.cell(1, 1).value, worksheet.cell(1, 2).value, worksheet.cell(1, 3).value, worksheet.cell(1, 4).value, worksheet.cell(1, 5).value],
worksheet.cell(2, 0).value: [worksheet.cell(2, 1).value, worksheet.cell(2, 2).value, worksheet.cell(2, 3).value, worksheet.cell(2, 4).value, worksheet.cell(2, 5).value],
worksheet.cell(3, 0).value: [worksheet.cell(3, 1).value, worksheet.cell(3, 2).value, worksheet.cell(3, 3).value, worksheet.cell(3, 4).value, worksheet.cell(3, 5).value]}

你应该开始了。注意,使用for循环可能更容易实现。你知道吗

相关问题 更多 >

    热门问题