附加到CSV文件中的一行

时间:2015-11-16 18:28:33

标签: python csv python-3.x

在运行以下代码后,假设我有一个这样的CSV文件:

Andy, 4 
Bochr, 2
John, 9

import csv

name = input('name: ')
score = input('score: ')

with open('test.csv', 'a') as f:
    a = csv.writer(f)
    data = [name, score]
    a.writerow(data)

如果我再次运行该代码并且我的名字是Andy,我如何将我的分数追加到第一行而不是开始一个名为Andy的新行? 例如,我们说我再次得了5分。你会如何将它添加到Andy的第一行看起来像:

Andy, 4, 5 
Bochr, 2
John, 9

提前谢谢你,

2 个答案:

答案 0 :(得分:1)

听起来你想要的东西更像是数据库或数据结构,而不是文本文件。一种具有非常易读的数据格式的解决方案是json:

import json
initial_data = {
    'Andy': [4],
    'Bochr': [2],
    'John': [9],
}
with open('test.json', 'w') as fp:
    json.dump(initial_data, fp, indent=4)

然后您的更新会更简单:

with open('test.json', 'r') as fp:
    data = json.load(fp)
data['Andy'].append(5)

并保存更新的数据:

with open('test.json', 'w') as fp:
    json.dump(initial_data, fp, indent=4)

答案 1 :(得分:0)

试试这个:

import csv

name = input('name: ')
score = input('score: ')
rows_list = []
with open('test.csv') as fin:
    reader = csv.reader(fin)
    for row in reader:
      if row[0] == name:
         row[1] = score
      rows_list.append(row)  
with open('test.csv', 'w') as f:
    a = csv.writer(f)
    data = rows_list
    a.writerows(data)

请记住,这假设您已经有一个test.csv存在