Seite 1 von 1

Excel in Python importieren

Verfasst: Samstag 11. Juli 2020, 20:59
von sql_sophie
Hallo liebe Community,

Ich habe heute eine Programmieraufgabe in Python angelegt, bei der es um Rentenauszahlungen ging.
Nun soll jede der Anfragen in einer Excel .xlsx Datei gespeichert werden und bei jedem Programmstart nicht gelöscht werden sonder weiter ergänzt werden.
Weiß jemand, wie man an so etwas herangeht?

Bei der Programmieraufgabe ging es genauer um die Berechnung von Rentenauszahlungsbeträgen bei einem gewissen Alter (zw. 60-65 Jahren). Dabei gab es die Option A, bei dem der Versicherte im Alter von 65 Jahren eine einmalige anteilige Auszahlung der Versichertensumme erhielt, bzw. weniger im Falle der Rente im Alter von 64, 63...60 Jahren. Bei Option B galt es, die Rentenauszahlungen mit bzw. ohne Ehegattenanwartschaft zu berechnen.

Es wäre super toll, wenn mir jemand bei dem Part mit dem Import der Excel-Liste behilflich sein könnte.

Vielen Dank und liebe Grüße schon mal,
Sophie

Re: Excel in Python importieren

Verfasst: Samstag 11. Juli 2020, 22:59
von Caskuda

Code: Alles auswählen

import csv


data = [['Name', 'Vorname', 'Alter'], ['Max', 'Mustermann', 65], ['Clara',  'Musterfrau', 65]]
file = 'example.xls'


"""Achtung, 'w' überschreibt auch existierende Dateien"""
with open(file, 'w') as excel_file:
    csv_writer = csv.writer(excel_file, dialect = 'excel')
    for person in data:
        csv_writer.writerow(person)


new_data = list()
with open (file, 'r') as excel_file:
    csv_reader = csv.reader(excel_file, dialect = 'excel')
    for line in csv_reader:
        print(line)
        new_data.append(line)


print()
print('Jetzt können wir in Python damit spielen.')
for i, line in enumerate(new_data):
    if i > 0:
        line[-1] = int(line[-1]) + 5
    print(line)
print()
another_person = ['Mr', 'X', 63]
new_data.append(another_person)


"""zum Anfügen an Dateien mit 'a' öffnen"""
with open (file, 'a') as excel_file:
    csv_writer = csv.writer(excel_file, dialect = 'excel')
    for person in new_data[1:]:
        csv_writer.writerow(person)


with open (file, 'r') as excel_file:
    csv_reader = csv.reader(excel_file, dialect = 'excel')
    for line in csv_reader:
        print(line)
        
        
        
 """falls das Arbeiten mit Dictionaries mehr Spaß macht: Zugriff über die Header-Namen:"""
 with open (file, 'r') as excel_file:
    dict_reader = csv.DictReader(excel_file, dialect = 'excel')
    for person in dict_reader:
        print(person)
        print(person.get('Alter'))       
Oben angeführt ist nur eine recht simple Version csv- (Excel-)Dateien zu öffnen und Daten anzuhängen.


Die module pandas und openpyxl sind ggf. noch einen Blick wert. Mit beiden lassen sich Exceldateien öffnen und auch abspeichern.
openpyxl ist hilfreich, wenn man die Darstellung innerhalb Exceldatei bearbeiten möchte, Pandas, wenn es um Auswertung von Daten geht.

Re: Excel in Python importieren

Verfasst: Samstag 11. Juli 2020, 23:30
von __blackjack__
@Caskuda: CSV-Dateien haben nicht die Endung ".xls".

Beim öffnen von Textdateien sollte man immer die Kodierung explizit angeben und bei CSV-Dateien ist das Argument ``newline=""`` wichtig, sonst werden unter Umständen Dateien erzeugt die kaputt sind.

Man verwendet nicht `enumerate()` und ein ``if`` auf *jedem* Datensatz nur um den *ersten* anders zu behandeln. Da würde man vor der Schleife einfach einmal den ersten Datensatz ”überlesen” und dann eine ganz normale Schleife über den Rest machen.

Ich würde CSV-Dateien nicht als ”Excel-Dateien” bezeichnen. Das Format ist grundsätzlich erst einmal nicht excelspezifisch.

Edit: Und im ersten Beitrag ist von ".xlsx"-Dateien die Rede — der ganze CSV-Kram ist da also nicht zielführend.

Re: Excel in Python importieren

Verfasst: Sonntag 12. Juli 2020, 01:31
von Caskuda
@sql_sophie und __blackjack__:
Da habe ich gewaltige am Ziel vorbei geschossen.
Bitte entschuldigt die fehlerhafte Lösung.
Lieben Dank, Blackjack, fürs richtigstellen.

Re: Excel in Python importieren

Verfasst: Sonntag 12. Juli 2020, 07:06
von Sirius3
@sql_sophie: mit welchem Paket sollst du Excel lesen und schreiben? Weitere sieht die Datei aus? Was hast du schon versucht? Wo kommst du nicht weiter? Code, Fehlermeldung?

Re: Excel in Python importieren

Verfasst: Montag 13. Juli 2020, 12:33
von sql_sophie
Hallo,
vielen lieben Dank für eure Antworten :)
Ich habe es schlussendlich wie folgt gelöst, vielleicht hilft das ja jemandem beim nächsten Mal:

import xlsxwriter

# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('Test03.xlsx')
worksheet = workbook.add_worksheet()

# Some data we want to write to the worksheet.
expenses = (
['Einmalige Auszahlung', str(versicherungsbetrag)],
['Rente', str(anwartschaftsbetrag)],
)

# Start from the first cell. Rows and columns are zero indexed.
row = 0
col = 0

# Iterate over the data and write it out row by row.
for item, cost in (expenses):
worksheet.write(row, col, item)
worksheet.write(row, col + 1, cost)
row += 1

workbook.close()

Ganz liebe Grüße
sql_sophie

Re: Excel in Python importieren

Verfasst: Montag 13. Juli 2020, 12:49
von Sirius3
versicherungsbetrag und anwartschaftsbetrag werden benutzt, aber nirgends definiert. Normalerweise möchte man Zahlen als Zahlen im Excel stehen haben und nicht als Strings.
Wenn man zu einer for-Schleife auch noch einen Index braucht, dann benutzt man enumerate:

Code: Alles auswählen

import xlsxwriter

# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('Test03.xlsx')
worksheet = workbook.add_worksheet()

# Some data we want to write to the worksheet.
expenses = (
    ['Einmalige Auszahlung', versicherungsbetrag],
    ['Rente', anwartschaftsbetrag],
)

# Iterate over the data and write it out row by row.
for row, (item, cost) in enumerate(expenses):
    worksheet.write(row, 0, item)
    worksheet.write(row, 1, cost)

workbook.close()