1

2 つの CSV ファイルがあります。1:

s555555,7
s333333,10
s666666,9
s111111,10
s999999,9

そして2つ:

s111111,,,,,
s222222,,,,,
s333333,,,,,
s444444,,,,,
s555555,,,,,
s666666,,,,,
s777777,,,,,

私は最終的にしたい:

[['s111111', '10', '', '', '', ''],
 ['s222222', '',   '', '', '', ''],
 ['s333333', '10', '', '', '', ''],
 ['s444444', '',   '', '', '', ''],
 ['s555555', '7',  '', '', '', ''],
 ['s666666', '9',  '', '', '', ''],
 ['s777777', '',   '', '', '', '']]

これが私のコードです:

new_marks = get_marks_from_file('assign1_marks.csv')
marks     = get_marks_from_file('marks.csv')

def merge_marks(all_marks, new_marks, column):
    for n in range(len(new_marks)):
        for a in range(len(all_marks)):
            if all_marks[a][0]==new_marks[n][0]:
                 all_marks[a][column]= new_marks[n][column]

                return marks

私は何を間違っていますか?私は得続けます:

>>> merge_marks(marks, new_marks, 1)

[['s111111', '',  '', '', '', ''],
 ['s222222', '',  '', '', '', ''],
 ['s333333', '',  '', '', '', ''],
 ['s444444', '',  '', '', '', ''],
 ['s555555', '7', '', '', '', ''],
 ['s666666', '',  '', '', '', ''],
 ['s777777', '',  '', '', '', '']]
4

1 に答える 1

2

この線

                return marks

for ループと if ステートメントの両方から抜け出すには、3 レベルのインデントを解除する必要があります。現在、最初all_marks[a][0]==new_marks[n][0]に見つかった一致で返され、他の一致は決して置き換えられません。

all_marksではなく戻りたいmarks: この場合、グローバル変数marksはたまたま同じで、変更されていますが、文字通り他の名前の変数で呼び出した場合は失敗します。

したがって、解決策は次のとおりです。

def merge_marks(all_marks, new_marks, column):
    for n in range(len(new_marks)):
        for a in range(len(all_marks)):
            if all_marks[a][0]==new_marks[n][0]:
                 all_marks[a][column]= new_marks[n][column]

    return all_marks
于 2012-08-29T21:55:23.290 に答える