Question

Je suis en train de comprendre le fichier source pour csv2rec dans matplotlib.mlab. Il est utilisé pour prendre un fichier csv et analyser les données dans certains formats. Ainsi, il peut prendre une chaîne « 234 » et le convertir en int. ou prendre une chaîne de date et d'en faire datetimes python.

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

Mon problème avec cette fonction est « convertisseurs ». Il commence comme Aucun. Puis, plus tard « func = convertisseurs [j] » j Je sais que est un nombre qui vient d'être créé par l'énumération. Il est donc à la recherche de l'élément de convertisseurs correspondants comme indexé par j. Mais il n'y a rien dans les convertisseurs, car il est Aucun droit? À moins que les programmes de python ne doivent pas être lu de haut en bas? Dans ce cas, nous obtenons la Func les deux lignes suivantes « si len (item.st .... etc) » ou du « autre: » section. Mais, je suppose simplement qu'il devrait être lu de haut en bas.

Je ne sais pas si l'une des autres choses sont importantes si je viens tout inclus la fonction. converterd est une application de dictionnaire, je crois que l'utilisateur peut fournir en tant que paramètre pour trouver un convertisseur automatique. checkrows est juste un numéro fourni par l'utilisateur comme un paramètre au début de vérifier la validité. Il est par défaut Aucun. Je suis encore un peu un débutant, si juste FYI. =)

Merci à tous. Ce site est tellement utile!

Était-ce utile?

La solution

Convertisseurs à nouveau se prépare au début de la boucle avec

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

Alors, après que ce n'est pas plus Aucun.

Autres conseils

À moins que je me manque quelque chose, la première itération « i » est égal à 0, de sorte que le suivant est exécuté:

converters = [mybool]*len(row)

et que "convertisseurs" initialise

Tout d'abord,

converters = None

établit une valeur initiale pour converters. De cette façon, si l'itération ne se produit pas (parce que readers peut être vide) alors quand la fonction retourne converters il existera et ont la valeur None.

Si l'itération sur readers se produit, alors converters est immédiatement remise à une valeur plus significative dans la première passe par l'itération (lorsque i==0):

converters = [mybool]*len(row)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top