例如:
输入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')