Returnwert einer Methode speichern & dieser wieder übergeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Remington Steele
User
Beiträge: 51
Registriert: Donnerstag 22. November 2012, 21:50

Ich habe das Problem, dass ich einen Zähler innerhalb einer Methode verwende (row_counter). Diesen zähle ich auch wie benötigt hoch. Der Zähler hat die Aufgabe, die Anzahl der bereits in ein Excelblatt geschriebenen Zeilen zu merken, damit es beim nächsten Aufruf keine Überschneidungen gibt und in die Folgezeilen geschrieben wird.

Leider schaffe ich es nicht, den return-Wert des row_counters zu speichern (auch nicht mit zusätzlichen Variablen) :K , so dass ich den gewünschten Zeilenstand beim nächsten Aufruf der Methode wieder hätte :(... es wird immer wieder bei 0 gestartet und das Programm bricht dadurch mit der Fehlermeldung "Attempt to overwrite cell..." ab.

Kann mir jemand weiterhelfen?
lunar

@Remington Steele Du erwartest doch nicht ernsthaft, dass wir Dir ohne Einblick in den Quelltext sinnvoll weiterhelfen können?!
Remington Steele
User
Beiträge: 51
Registriert: Donnerstag 22. November 2012, 21:50

Hm ok... dachte das wäre offensichtlich, ich probier's mal mit relativem Pseudocode (da nicht mehr auf Arbeit):

Code: Alles auswählen


row_counter = 0

def excel_liste(quelldatei, row_counter)
  for row, col in quellsdatei_sheet:
    neuedatei_sheet.write(row_counter, col, cell, ...)
    row_counter +=1

  return row_counter

for quelldatei in quelldateiordner:
  quelldatei_sheet = quelldatei.sheet_by_index(0)
  excel_liste(quelldatei_sheet, row_counter)

neuedatei.save("Dateiname")

Ist damit einigermassen verständlich, was ich meine? Die Daten aus der ersten Exceldatei wird übrigens so (d.h. natürlich mit dem eigentlichen Code) richtig in die neue Exceldatei geschrieben (d.h. wenn ich nur eine Datei im Quellordner habe), nur ab der 2. Datei kommt logischerweise dieser Überschreib-Fehler.
Benutzeravatar
pixewakb
User
Beiträge: 1409
Registriert: Sonntag 24. April 2011, 19:43

Naja, vielleicht solltest du den Rückgabewert mal an eine Variable im Mainprogramm binden, d. h. dort irgendwo speichern :D

Code: Alles auswählen

def hochzaehlen(zaehler):
    ''' Bekommt den zaehler, zaehlt da hoch
    und gibt den Wert der Variable auf der Konsole aus

    '''
    print("Funktion hochzaehlen wurde aufgerufen.")
    for i in range(10):
        zaehler += 1
        print(zaehler)

    return zaehler


zaehler = 0

for i in range(10):
    zaehler = hochzaehlen(zaehler)
Schau einmal, ob du mit diesem Quelltext hier den Fehler in deinem Skript findest.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Es gibt natuerlich auch noch itertools.count.
=> http://docs.python.org/2/library/iterto ... ools.count
Dann kann man den Generator einfach durchreichen. Als (abstraktes und sinnfreies) Beispiel:

Code: Alles auswählen

from itertools import count
    
def write_rows(seq, count_gen):

    for item in seq:
        print "{0}->{1}".format(next(count_gen), item)


def process(things, count_gen):

    for thing in things:
        write_rows(thing, count_gen)


if __name__ == '__main__':

    things = [range(5)] * 3
    count_gen = count(1)
    process(things, count_gen)
    process(things, count_gen)

:wink:
yipyip
Antworten