使用python替换csv中的值

时间:2012-08-19 07:26:20

标签: python csv

def update(all_marks, stud_num, mark, column, result):
    lines = [l for l in all_marks]

    for row in all_marks:
        if stud_num in row:
            lines[rows][column] = mark

从这里开始,我尝试使用lines[rows][column] = mark替换该值。

应该用mark替换现有值。 但是定义行有一个问题。 谁知道如何解决? 感谢。

编辑: 以下是all_marks中的数据样本:

  

[['a','','','','',''],

     

['b','','','','',''],

     

['c','','','','',''],

     

['d','','','','',''],

     

['e','','','','',''],

     

['f','','','','',''],

     

['g','','','','','']]

我想在这里做的是用'标记'替换''中的值。

例如,def update(all_marks,'a','10',2,True):将返回

  

[['a','','10','','',''],

     

['b','','','','',''],

     

['c','','','','',''],

     

['d','','','','',''],

     

['e','','','','',''],

     

['f','','','','',''],

     

['g','','','','','']]

感谢您帮助新手。

3 个答案:

答案 0 :(得分:2)

以下是函数的修改版本,它将按预期返回输出:

def update(all_marks, stud_num, mark, column):
    for i in range(len(all_marks)):
        if stud_num in all_marks[i]:
            all_marks[i][column] = mark
    return all_marks

以下是它的工作原理:

>>> marks
[['a', '', '', '', '', ''], ['b', '', '', '', '', ''], ['c', '', '', '', '', ''], ['d', '', '', '', '', ''], ['e', '', '', '', '', ''], ['f', '', '', '', '', ''], ['g', '', '', '', '', '']]

>>> update(marks,'a','10',2)
[['a', '', '10', '', '', ''], ['b', '', '', '', '', ''], ['c', '', '', '', '', ''], ['d', '', '', '', '', ''], ['e', '', '', '', '', ''], ['f', '', '', '', '', ''], ['g', '', '', '', '', '']]

请注意,marks现已修改

>>> marks
[['a', '', '10', '', '', ''], ['b', '', '', '', '', ''], ['c', '', '', '', '', ''], ['d', '', '', '', '', ''], ['e', '', '', '', '', ''], ['f', '', '', '', '', ''], ['g', '', '', '', '', '']]

如果您想更改它以便更新只返回已修改数据的副本,请按以下方式更改该功能:

def update(all_marks, stud_num, mark, column):
    tmp = all_marks
    for i in range(len(tmp)):
        if stud_num in tmp[i]:
            tmp[i][column] = mark
    return tmp

答案 1 :(得分:1)

以下是工作代码:

def update(all_marks, stud_num, mark, column, result):
    lines = [l for l in all_marks]
    for row in range(len(all_marks)):
        if all_marks[row][0] == stud_num:
            lines[row][column] = mark

以下是解释:

for row in range(len(all_marks)):

=>你不想迭代列表对象(例如['a','','','','','']),而不是列表索引

if stud_num == all_marks[row][0]:

=>这是为了仅检查行的第一个字符,而不是任何字符。

lines[row][column] = mark

=>错误在这里,应该是而不是

答案 2 :(得分:0)

对行索引进行循环不如循环行本身那样有效。更多的pythonic方式是

def update2(all_marks,stud_num,mark,column):
    for row in all_marks:
        if stud_num in row:
            row[column] = mark
    return all_marks