ich benötige mal wieder eure Hilfe/Meinung/Kritik zu einer Aufgabe die ich mit Python gelöst habe.
Es gibt drei Excel-Listen(dabei handelt es sich um unterschiedliche Baugrößen), in denen befinden sich unter anderem Artikelnummern. Ich will nun die Artikelnummern, die in allen drei Listen vorkommen in eine neue Excel-Datei schreiben und dann will ich noch die Artikelnummern die nur in der Baugröße 70 und 80 verkommen in die Excel-Datei schreiben.
Nun habe ich das zwar geschafft, aber ich tat mir teilweise schwer ordentliche Namen zu finden und das ist für mich immer ein Zeichen, dass ich das zu kompliziert mache. Ich dachte mir, das wenn ich mich aus 'more_itertools' bediene, ein schönerer Code rauskommt, als verschatelte 'for'-Schleifen in denen ich "händisch" über alle Artikel iteriere und vergleiche. Aber irgendwie sieht das Ergebnis für mich so aus, als ob man das noch etwas vereinfachen/eleganter machen könnte
Über jegliche Art von Hinweisen bin ich euch sehr dankbar.
Code: Alles auswählen
from itertools import chain
from pathlib import Path
from more_itertools import duplicates_everseen
from openpyxl import Workbook, load_workbook
PATH_TO_EXCEL = Path(r"C:\Users\Dennis\Documents")
EXCEL_FILES = ["60.xlsx", "70.xlsx", "80.xlsx"]
def create_lists(articles):
return [
list(chain(articles[0], articles[1])),
list(chain(articles[0], articles[2])),
list(chain(articles[1], articles[2])),
]
def read_data_from_excel():
articles = []
for file in EXCEL_FILES:
workbook = load_workbook(filename=Path(PATH_TO_EXCEL, file))
articles.append(
[cell.value for cell in workbook["Tabelle1"]["A"] if cell.value]
)
return articles
def remove_double_duplicates(articles):
all_articles = list(chain(articles[0], articles[1]))
return set(
[article for article in all_articles if all_articles.count(article) >= 1]
)
def search_duplicates(articles):
return [list(duplicates_everseen(article)) for article in articles]
def write_into_excel_file(articles):
workbook = Workbook()
worksheet = workbook.active
for column, article in enumerate(articles):
for index, item in enumerate(article):
worksheet.cell(row=index + 1, column=column + 1).value = item
workbook.save(r"C:\Users\Dennis\Documents\Gleichteile.xlsx")
def main():
articles = read_data_from_excel()
lists_to_compare = create_lists(articles)
duplicates_found = search_duplicates(lists_to_compare)
duplicates_of_all = list(remove_double_duplicates(duplicates_found))
write_into_excel_file([duplicates_of_all, duplicates_found[2]])
if __name__ == "__main__":
main()
Grüße und schönen Abend
Dennis