Pergunta

Então, estou tentando compreender o arquivo de origem do CSV2Rec no matplotlib.mlab. É usado para pegar um arquivo CSV e analisar os dados em determinados formatos. Portanto, pode levar uma string '234' e convertê -la em int. Ou pegue uma string de data e transforme -a em Python DataTeates.

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

Meu problema com esta função é 'conversores'. Começa como nenhum. Mais tarde, 'Func = conversores [J]' J Eu sei que é um número que é criado apenas através da enumeração. Portanto, está procurando o item de conversores correspondentes, conforme indexado por j. Mas não há nada em conversores porque não está certo? A menos que os programas Python não precisem ser lidos de cima para baixo? Nesse caso, obtemos o Func das próximas duas linhas "se Len (item.st .... etc)" ou da seção 'else:'. Mas eu apenas assumi que teria que ser lido de cima para baixo.

Não sei se alguma das outras coisas é importante, então apenas incluí toda a função. O Converterd é um mapeamento de dicionário, acredito que o usuário pode fornecer como parâmetro para encontrar um conversor automaticamente. O CheckRows é apenas um número fornecido pelo usuário como um parâmetro no começo para verificar a validade. Por padrão, não é nenhum. Eu ainda sou meio iniciante, então apenas FYI. =)

Obrigado a todos. Este site é tão útil!

Foi útil?

Solução

Os conversores são definidos novamente no início do loop com

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

Então, depois disso, não é mais nenhum.

Outras dicas

A menos que esteja perdendo alguma coisa, na primeira iteração "i" é 0, então o seguinte é executado:

converters = [mybool]*len(row)

E isso inicializa "conversores"

Primeiro,

converters = None

define um valor inicial para converters. Dessa forma, se a iteração não acontecer (porque readers pode estar vazio) então quando a função retornar converters ele existirá e terá o valor None.

Se a iteração sobre readers acontece então converters é imediatamente redefinido para um valor mais significativo na primeira passagem pela iteração (quando i==0):

converters = [mybool]*len(row)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top