Python 从csv添加特定字段

Python 从csv添加特定字段,python,csv,Python,Csv,如果用户相同,我尝试从CSV文件中添加特定值。我解释不清楚,所以我会给你看 ===================== |E-mail | M-count | |a@a.com | 12 | |b@a.com | 8 | |a@a.com | 13 | |c@a.com | 2 | ===================== 然后,它尝试添加属于特定用户的所有内容: ===================== |E-mail | Total

如果用户相同,我尝试从CSV文件中添加特定值。我解释不清楚,所以我会给你看

=====================
|E-mail  | M-count |
|a@a.com | 12      |
|b@a.com | 8       |
|a@a.com | 13      |
|c@a.com | 2       |
=====================
然后,它尝试添加属于特定用户的所有内容:

=====================
|E-mail  | Total   |
|a@a.com | 25      |
|b@a.com | 8       |
|c@a.com | 2       |
=====================
我分割了CSV并在一个集合中添加了我需要的值,但是我想不出一种方法来添加我需要的值。有什么想法吗

编辑:

这就是我的CSV的外观:

p_number,duration,clnup#
5436715524,00:02:26,2
6447654246,00:17:18,5
5996312484,00:01:19,1
5436715524,00:10:12,6

我想获得每个唯一p#U编号的总持续时间和总clnup。很抱歉造成混淆,但上表只是一个示例。

您可以使用
orderedict
将名称存储为值,并在运行时更新计数:

import csv

ifile = open('sample.csv', 'rb')
csv_reader = csv.reader(ifile)

d = {}
for row in csv_reader:
    d[row[0]] = int(row[1]) if d.get(row[0], None) is None else d[row[0]] + int(row[1])
from pprint import pprint
pprint(d)
import csv
from collections import OrderedDict

od = OrderedDict()

with open("test.txt") as f:
    r = csv.reader(f)
    head = next(r)
    for name,val in r:
        od.setdefault(name, 0)
        od[name]  += int(val)

print(od)
OrderedDict([('a@a.com', 25), ('b@a.com', 8), ('c@a.com', 2)])
要更新原始文件,您可以写入一个命名的临时文件,然后在使用od.items用writerows写入行后,使用shutil.move替换原始文件:

import csv
from collections import OrderedDict
from shutil import move
from tempfile import NamedTemporaryFile
od = OrderedDict()

with open("test.txt") as f, NamedTemporaryFile(dir=".",delete=False) as out:
    r = csv.reader(f)
    wr = csv.writer(out)
    head = next(r)
    wr.writerow(head)
    for name,val in r:
        od.setdefault(name, 0)
        od[name]  += int(val)
    wr.writerows(od.iteritems())


move(out.name,"test.txt")
输出:

E-mail,M-count
a@a.com,25
b@a.com,8
c@a.com,2
如果您不关心订单,请使用defaultdict:

import csv

from collections import defaultdict
from shutil import move
from tempfile import NamedTemporaryFile
od = defaultdict(int)

with open("test.txt") as f, NamedTemporaryFile(dir=".",delete=False) as out:
    r = csv.reader(f)
    wr = csv.writer(out)
    head = next(r)
    wr.writerow(head)
    for name,val in r:
        od[name]  += int(val)
    wr.writerows(od.iteritems())

最好给我们看一下这个文件的一些片段和一些你编辑的文章的代码。关于代码,它目前正在读取CSV。谢谢,先生!这真的很有趣,我从来没有想过我可以用这个方法。我要试试看@user5000054,不用担心,这假定数据是由comma@user5000054,您可能希望跳过输入csv的第一行(如果它包含标题)。