Вопрос

Итак, я пытаюсь понять исходный файл для csv2rec в matplotlib.mlab.Он используется для получения csv-файла и преобразования данных в определенные форматы.Таким образом, он может взять строку '234' и преобразовать ее в int.или возьмите строку даты и преобразуйте ее в 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

Моя проблема с этой функцией - "конвертеры". Она начинается как None.Затем позже 'func = converters[j]' j, я знаю, это число, которое только что создано с помощью перечисления.Таким образом, он ищет соответствующий элемент converters, проиндексированный по j.Но в конвертерах ничего нет, потому что это неправильно?Разве программы на Python не обязательно читать сверху вниз?В этом случае мы получаем функцию из следующих двух строк "if len(item.st....etc)" или из раздела "else:".Но я просто предположил, что это нужно будет читать сверху вниз.

Я не знаю, важны ли какие-либо другие вещи, поэтому я просто включил всю функцию целиком.converterd - это сопоставление по словарю, которое, я полагаю, пользователь может предоставить в качестве параметра для автоматического поиска конвертера.checkrows - это просто число, предоставленное пользователем в качестве параметра в начале для проверки достоверности.По умолчанию это значение равно None.Я все еще в некотором роде новичок, так что просто к твоему сведению.=)

Спасибо всем.Этот сайт такой полезный!

Это было полезно?

Решение

Converters снова настраивается в начале цикла с помощью

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

Так что после этого это уже не Ничто.

Другие советы

Если я чего-то не упускаю, на первой итерации "i" равно 0, поэтому выполняется следующее:

converters = [mybool]*len(row)

и это инициализирует "конвертеры".

Первый,

converters = None

задает начальное значение для converters.Таким образом, если итерация не выполняется (потому что readers может быть пустым), затем, когда функция возвращает converters он будет существовать и иметь соответствующую ценность None.

Если итерация завершится readers случается, значит converters немедленно сбрасывается на более значимое значение при первом прохождении итерации (когда i==0):

converters = [mybool]*len(row)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top