在Python中合并csv文件

时间:2015-07-15 11:32:52

标签: python csv merge

例如:

输入csv1:

id,count
1A,9
2A,8
4A,3
6A,5

输入csv2:

id,count
1A,2
2A,2
3A,1
4A,7

输入csv3:

id,count
1A,2
5A,1
6A,1
8A,2
9A,1

' id并非在所有3个csv文件中均匀分布,有些显示在1个文件中,有些则不是。

我想要的输出csv文件如下所示:

output.csv(用id总结计数值)

id,count
1A,13
2A,10
3A,1
4A,10
5A,1
6A,6
8A,2
9A,1

output.csv(按ID列出所有计数值,项目的值0确实存在于相应的csv文件中,但存在于其他csv文件中)

id,count1,count2,count3
1A,9,2,2
2A,8,2,0
3A,0,1,0
4A,3,7,0
5A,0,0,1
6A,5,0,1
8A,0,0,2
9A,0,0,1

非常感谢任何帮助。

======================更新====================

感谢@Lilith'回答,它适用于问题1.我修改了代码以进行额外工作:代码可以处理给定文件夹中的所有csv文件,结果csv中的行按' count'排序。值。无法获得解决方案的解决方案,可以稍后再试。

import os
import csv
from skipdict import SkipDict

data = {}      

def mergeCSV(fileDir,outFile,header1,header2):
    getDataFromAll(fileDir)
    writeCSVDatatToFile(outFile,header1,header2)

def getDataFromAll(fileDir):
    for root, dirs, files in os.walk(fileDir):
        for aFile in files:
            if aFile.endswith(".csv"):
                aFile = os.path.join(root, aFile)
                worker(aFile)

def worker(aFile):
    with open(aFile, 'rb') as csvfile:
        csv_reader = csv.reader(csvfile, delimiter=',', quotechar='|')
        for row in list(csv_reader)[1::]:
            if row[0] in data:
                data[row[0]] += int(row[1])
            else:
                data[row[0]] = int(row[1])

def writeCSVDatatToFile(outFile,header1,header2):
    sorted_data = SkipDict(data)
    with open(outFile, 'w') as csvfile:
        fieldnames = [header1, header2]
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()
        for key, value in sorted_data.items():
            writer.writerow({header1: key, header2: int(value)})

mergeCSV('/home/csv/','/home/csv/output.csv','id','count')

0 个答案:

没有答案
相关问题