好的,所以我有两张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
答案 0 :(得分:1)
根据xlrd Documentation,col
方法返回“给定列中Cell
个对象的序列”。
它没有提及有关Cell
个对象的比较的任何内容。深入研究the source,似乎他们没有将任何比较方法编写到类中。因此,Python documentation表示将通过“对象标识”比较对象。换句话说,比较将为False
,除非它们是{em>完全相同的Cell
类实例,即使它们包含的值相同。
您需要比较value
的{{1}} s。例如:
Cell