使用Python在CSV文件中的特定行中附加/更新数据

时间:2015-03-16 15:41:30

标签: python csv

好的我有一个程序通过使用代码输出用户的名字,姓氏和得分到一个字符串(逗号分隔):

result=','.join((strFirstName,strLastName,str(score),"\n"))

然后我可以使用以下代码将其写入CSV文件:

file=open("filename.csv","a")
    file.write(result)
    file.close()

这很好但是我希望每个用户最多可以记录3个分数,只保存最新的三个分数。 我无法弄清楚如何实现

  1. 如果用户尚不存在,则只写新行
  2. 使用最新分数更新现有用户,仅替换最旧分数

1 个答案:

答案 0 :(得分:0)

与上述评论一样,您必须使用字典或列表来跟踪csv文件中的用户,然后修改该字典/列表,然后回写到csv。以下是该概念的快速实现:

new_details = dict()
new_details["jack jackson"] = 100

users = dict()
with open("filename.csv", "r") as csv_file:
    for line in csv_file:
        line = line.strip().split(",")
        users[line[0]+" "+line[1]] = line[2:]

with open("filename.csv", "w") as csv_file:
    for user in users:
        user_details = user.split()
        if (user in new_details):
            if len(users[user]) >= 3:
                user_details += users[user][1:] + [str(new_details[user])]
            else:
                user_details += users[user] + [str(new_details[user])]
        else:
            user_details += users[user]
        csv_file.write(','.join(user_details) + "\n")

    for user in new_details:
        if user not in users:
            user_details = user.split() + [str(new_details[user])]
            csv_file.write(','.join(user_details)+"\n")

所有内容都基于使用“firstName lastName”键方案的字典。 new_details将是您获得的新分数数据。在将新用户写入csv之前,它会首先将所有现有用户写入csv(如果存在则添加新分数)。