首页 > 解决方案 > 通过关键数据使用 Python 更改 CSV 中的一行

问题描述

因此,我正在尝试创建一个函数,用户将在其中输入唯一标识符(在本例中为第一列中的数字),以便他们可以在 CSV 中编辑该行中的详细信息。我快接近了,但不是编辑,或者至少是删除原始文件并放入新行,它只是将其添加到末尾。非常感谢任何帮助。弹出我到目前为止所拥有的东西,我很可能是在吠叫完全错误的虚拟树....

reference = "2"

fi = open('mylovelycsv.csv', 'r')
calls = []
while True:
    call = fi.readline()
    if not call:
        break
    fields = call.split(',')
    calls.append(call)
    if fields[0] == reference:
        fields[1] = "This is a new bit of information"
        new_details = ','.join(fields)
calls.append(new_details)
fi.close()

fo = open('mylovelycsv.csv', 'w')
for row in calls:
    fo.write(row)
fo.close()

CSV的想法...

1, blue, to go to the moon
2, orange, to swim with dolphins
3, black, to have a big house and lots of money

标签: pythonpython-3.xcsvedit

解决方案


您不应该使用 append,因为它会附加到列表的末尾。

您想要替换列表中的现有项目,您可以通过它的索引直接引用它来做到这一点。

这就是下面的代码所做的,但可能有更好的方法

reference = "2"
idx = 0 
fi = open('test.csv', 'r')
calls = []
while True:
    call = fi.readline()

    if not call:
        break
    calls.append(call)
    
    fields = call.split(',')
    if fields[0] == reference:
        fields[1] = "This is a new bit of information"
        new_details = ','.join(fields)
        calls[idx] = new_details
    idx+=1
fi.close()

fo = open('mylovelycsv.csv', 'w')
for row in calls:
    fo.write(row)
fo.close()


推荐阅读