XLRD:成功提取了2张中的2个列表,但列表比较不起作用

时间:2017-01-12 17:02:49

标签: python excel xlrd

好的,所以我有两张xlsx表,两张表都在第二列,索引1,一张SIM卡号码列表。在使用xlrd提取数据之后,我已成功将两列的内容打印到我的powershell终端中作为2个列表,以及这些列表中的元素数量。

第一张(hisSheet)有454个条目,第二张(ourSheet)有361.我需要找到第二张中不存在的93并将它们放入(unpaidSims)。我当然可以手动执行此操作,但我希望将来自动执行此任务,因为我不可避免地需要再次执行此操作,因此我尝试编写此python脚本。

考虑到python同意我有454个条目的列表,以及361个条目的列表,我想我只需要找出一个列表比较,我在Stack Overflow上进行了研究,并尝试了3次使用3种不同的解决方案,但每次,当我使用该脚本生成第三个列表(unpaidSims)时,它表示454 ...意味着它没有删除在较小列表中重复的条目。请指教。

from os.path import join, dirname, abspath
import xlrd

theirBookFileName = join(dirname(dirname(abspath(__file__))), 'pycel', 'theirBook.xlsx')

ourBookFileName = join(dirname(dirname(abspath(__file__))), 'pycel', 'ourBook.xlsx')

theirBook = xlrd.open_workbook(theirBookFileName)

ourBook = xlrd.open_workbook(ourBookFileName)

theirSheet = theirBook.sheet_by_index(0)

ourSheet = ourBook.sheet_by_index(0)

theirSimColumn = theirSheet.col(1)

ourSimColumn = ourSheet.col(1)

numColsTheirSheet = theirSheet.ncols

numRowsTheirSheet = theirSheet.nrows

numColsOurSheet = ourSheet.ncols

numRowsOurSheet = ourSheet.nrows

# First Attempt at the comparison, but fails and returns 454 entries from the bigger list
unpaidSims = [d for d in theirSimColumn if d not in ourSimColumn]
print unpaidSims
lengthOfUnpaidSims = len(unpaidSims)
print lengthOfUnpaidSims
print "\nWe are expecting 93 entries in this new list"

# Second Attempt at the comparison, but fails and returns 454 entries from the bigger list
s = set(ourSimColumn)
unpaidSims = [x for x in theirSimColumn if x not in s]
print unpaidSims
lengthOfUnpaidSims = len(unpaidSims)
print lengthOfUnpaidSims

# Third Attempt at the comparison, but fails and returns 454 entries from the bigger list
unpaidSims = tuple(set(theirSimColumn) - set(ourSimColumn))
print unpaidSims
lengthOfUnpaidSims = len(unpaidSims)
print lengthOfUnpaidSims

1 个答案:

答案 0 :(得分:1)

根据xlrd Documentationcol方法返回“给定列中Cell个对象的序列”。

它没有提及有关Cell个对象的比较的任何内容。深入研究the source,似乎他们没有将任何比较方法编写到类中。因此,Python documentation表示将通过“对象标识”比较对象。换句话说,比较将为False,除非它们是{em>完全相同的Cell类实例,即使它们包含的值相同。

您需要比较value的{​​{1}} s。例如:

Cell