使用python在csv文件中以特定方式添加列值

2024-05-23 12:31:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似于以下内容的csv文件:

title  title2  h1  h2  h3 ... 
l1.1     l1     1   1   0  
l1.2     l1     0   1   0
l1.3     l1     1   0   1
l2.1     l2     0   0   1
l2.2     l2     1   0   1
l3.1     l3     0   1   1
l3.2     l3     1   1   0
l3.3     l3     1   1   0
l3.4     l3     1   1   0    

我希望能够以以下方式添加列:
h1(l1.1+l1.2+l1.3)=2
h1(l2.1+l2.2)=1
h1(l3.1+l3.2+l3.3+l3.4)=3,依此类推 我想把每个值的最终计数作为汇总表:

^{pr2}$

我该怎么做?在


Tags: 文件csvl1title方式h2h1h3
2条回答

这样的事情应该行得通。它接受表单中的输入

title,title2,h1,h2,h3
l1.1,l1,1,1,0
l1.2,l1,0,1,0
l1.3,l1,1,0,1
l2.1,l2,0,0,1
l2.2,l2,1,0,1
l3.1,l3,0,1,1
l3.2,l3,1,1,0
l3.3,l3,1,1,0
l3.4,l3,1,1,0

和输出

^{pr2}$

用python3.1.2进行了测试。在python2.x中,您需要将open()调用更改为使用二进制模式,并删除newline=""位)。您还可以删除对list()的调用,因为在python2.x中,map()已经返回了一个列表。在

import csv
import operator

reader = csv.reader(open("test.csv", newline=""), dialect="excel")
result = {}

for pos, entry in enumerate(reader):
    if pos == 0:
        headers = entry
    else:
        if entry[1] in result:
            result[entry[1]] = list(map(operator.add, result[entry[1]], [int(i) for i in entry[2:]]))
        else:
            result[entry[1]] = [int(i) for i in entry[2:]]

writer = csv.writer(open("output.txt", "w", newline=""), dialect="excel")
writer.writerow(headers[1:])

keys = sorted(result.keys())
for key in keys:
    output = [key]
    output.extend(result[key])
    writer.writerow(output)

看看csv模块。你要做的是用csv.reader. 然后迭代该文件,每次一行。将添加的结果累加到一个临时列表中。当你完成后,你把这个列表写到一个新的csv.writer. 在

您可能需要定义一个方言,因为您并不是真正使用CSV而是一些制表符分隔的格式。在

相关问题 更多 >