0

だから私はmatplotlib.mlabのcsv2recのソースファイルを理解しようとしています。csvファイルを取得し、データを特定の形式に解析するために使用されます。したがって、文字列「234」を取り、それをintに変換する場合があります。または、日付文字列を取得してpythondatetimesにします。

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私が知っているのは、列挙によって作成されたばかりの数値です。したがって、jでインデックス付けされた対応するコンバーターアイテムを探しています。しかし、それは正しくないので、コンバーターには何もありませんか?Pythonプログラムを上から下に読む必要がない場合を除いて?その場合、関数は次の2行の「iflen(item.st .... etc)」または「else:」セクションから取得します。しかし、私はそれを上から下に読まなければならないと思いました。

他に重要なことがあるかどうかわからないので、関数全体を含めました。converterdは、ユーザーがコンバーターを自動的に見つけるためのパラメーターとして提供できると私が信じている辞書マッピングです。checkrowsは、有効性をチェックするために最初にパラメーターとしてユーザーによって提供される単なる数値です。デフォルトではNoneです。私はまだ初心者なので、fyiだけです。=)

みんな、ありがとう。このサイトはとても役に立ちます!

4

3 に答える 3

2

Converters は、ループの開始時に再度設定されます

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

その後、それはもうなしではありません。

于 2009-09-23T18:51:02.487 に答える
1

何かが欠けていない限り、最初の反復で「i」は0であるため、次が実行されます。

converters = [mybool]*len(row)

そしてそれは「コンバーター」を初期化します

于 2009-09-23T18:48:55.353 に答える
1

初め、

converters = None

の初期値を設定しますconverters。このように、反復が発生しない場合 (readers空である可能性があるため)、関数が返さconvertersれたときに存在し、値が になりますNone

反復オーバーreadersが発生した場合、 は反復convertersの最初のパスでより意味のある値にすぐにリセットされます ( の場合i==0):

converters = [mybool]*len(row)
于 2009-09-23T19:34:18.483 に答える