Ok, also habe ich zwei xlsx Blätter, beide Blätter haben in ihrer zweiten Spalte, bei Index 1, eine Liste von SIM-Karten-Nummern. Ich habe erfolgreich den Inhalt beider Spalten in meinem Powershell-Terminal als 2 Listen und die Menge der Elemente in diesen Listen gedruckt, nachdem diese Daten mit xlrd extrahiert wurden.XLRD: Erfolgreich 2 Listen aus 2 Blättern extrahiert, aber Listenvergleich funktioniert nicht
Das erste Blatt (ihrSheet) hat 454 Einträge, das zweite (unserSheet) hat 361. Ich muss die 93 finden, die nicht im zweiten Blatt existieren und sie in (unbezahlteSims) setzen. Ich könnte das natürlich manuell machen, aber ich möchte diese Aufgabe für die Zukunft automatisieren, wenn ich es unweigerlich wiederholen muss, also versuche ich dieses Python-Skript zu schreiben.
In Anbetracht Python stimmt überein, dass ich eine Liste von 454 Einträge und eine Liste von 361 Einträge habe, dachte ich, ich brauche nur einen Listenvergleich und ich recherchierte das auf Stack Overflow und versuchte 3 mal mit 3 verschiedenen Lösungen , aber jedes Mal, wenn ich dieses Skript verwende, um die dritte Liste (unbezahlteSim) zu erzeugen, heißt es 454 ... was bedeutet, dass es die Einträge, die in der kleineren Liste dupliziert sind, nicht entfernt hat. Bitte beraten.
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
Sind Sie sicher, dass alle Einträge in der kleineren Liste auch in der größeren Liste sind? – glibdud