Frage

Ich versuche also, die Quelldatei für CSV2REC in Matplotlib.mlab zu verstehen. Es wird verwendet, um eine CSV -Datei aufzunehmen und die Daten in bestimmte Formate zu analysieren. Es kann also eine Zeichenfolge '234' dauern und sie in int umwandeln. Oder nehmen Sie eine Datumszeichenfolge und machen Sie es in Python DateTimes.

def get_converters(reader):

    converters = None
    for i, row in enumerate(reader):
        if i==0:
            converters = [mybool]*len(row)
        if checkrows and i>checkrows:
            break
        #print i, len(names), len(row)
        #print 'converters', zip(converters, row)
        for j, (name, item) in enumerate(zip(names, row)):
            func = converterd.get(j)
            if func is None:
                func = converterd.get(name)
            if func is None:
                #if not item.strip(): continue
                func = converters[j]
                if len(item.strip()):
                    func = get_func(name, item, func)
            else:
                # how should we handle custom converters and defaults?
                func = with_default_value(func, None)
            converters[j] = func
    return converters

Mein Problem mit dieser Funktion sind "Konverter". Es beginnt als keine. Dann ist später 'Func = Converters [j]' J Ich weiß, dass eine Zahl nur durch Aufzählung erstellt wird. So sucht es nach dem entsprechenden Konverter -Element, wie von j indiziert. Aber es gibt nichts in Konvertern, weil es keine ist, oder? Es sei denn, Python -Programme müssen nicht von oben nach unten gelesen werden? In diesem Fall erhalten wir den Func aus den nächsten beiden Zeilen "Wenn Len (item.st .... usw.)" oder aus dem Abschnitt "else:". Aber ich nahm nur an, dass es von oben nach unten gelesen werden müsste.

Ich weiß nicht, ob eines der anderen Dinge wichtig ist, deshalb habe ich nur die ganze Funktion aufgenommen. Converterd ist eine Wörterbuchzuordnung, die der Benutzer als Parameter für den automatischen Konverter bereitstellen kann. Checkrows ist nur eine Nummer, die vom Benutzer als Parameter zu Beginn bereitgestellt wird, um die Gültigkeit zu überprüfen. Es ist standardmäßig keine. Ich bin immer noch eine Art Anfänger, also nur zu Ihrer Information. =))

Vielen Dank an alle. Diese Seite ist so hilfreich!

War es hilfreich?

Lösung

Konverter werden zu Beginn der Schleife wieder eingestellt mit

if i==0:
  converters = [mybool]*len(row)

Danach ist es also nicht mehr.

Andere Tipps

Wenn mir nichts fehlt, ist bei der ersten Iteration "I" 0, also wird Folgendes ausgeführt:

converters = [mybool]*len(row)

und das initialisiert "Konverter"

Zuerst,

converters = None

legt einen Anfangswert für fest converters. Auf diese Weise, wenn die Iteration nicht passiert (weil readers kann leer sein) dann, wenn die Funktion zurückkommt converters Es wird existieren und den Wert haben None.

Wenn die Iteration vorbei readers passiert dann converters wird sofort auf einen aussagekräftigeren Wert im ersten Durchgang durch die Iteration zurückgesetzt (wann i==0):

converters = [mybool]*len(row)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top