根据包含列总和的列将CSV文件拆分为多个文件

时间:2015-11-04 06:29:32

标签: python file csv itertools

我在stackoverflow https://stackoverflow.com/questions/31081953/split-csv-file-into-two-csv-files-based-on-the-content-of-a-column上找到了一个解决方案,用于将文件分成多个列,如下所示

import csv
from itertools import groupby

for key, rows in groupby(csv.reader(open("newone.csv")),
                         lambda row: row[0]):
    with open("%s.csv" % key, "w") as output:
        for row in rows:
            output.write(",".join(row) + "\n")

这样做的工作正常,但我想打印出某些列中的数字总和以及第3和第4列,我该怎么做?
看看这张图片 - http://i.imgur.com/KIxLOnr.jpg 这段代码工作正常,但我需要生成橙色以及该图像中突出显示的最后一行(我手动添加那些)。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

这会在每行末尾添加数字:

for row in rows:
    output.write(",".join(row))
    sum_of_certain_cols = row[2] + row[3]
    output.write("," + sum_of_certain_cols + "\n")

如果你想把总和放在某个位置,你应该做insert之类的:

    sum_of_certain_cols = row[2] + row[3]
    row.insert(4, str(sum_of_certain_cols))
    output.write(",".join(row) + "\n")

评论后修改

  1. 不要忘记将列投射到数据类型,尽管我认为不再需要这一行,因为我了解您的需求:

    sum_of_certain_cols = int(row[2]) + int(row[3])
    
  2. 如果你想在最后加总,你需要一个累加器,例如:

    sums = [0] * len(rows)
    

    然后在循环中做所有的总和:

    sums[1] += int(row[1])
    sums[2] += int(row[2])
    

    然后在循环之后写下所有内容:

    output.write(",".join(sum) + "\n")
    
相关问题