密钥列CSV文件python 3上的重复计数

时间:2014-09-02 14:09:46

标签: csv python-3.x duplicates

我正在使用分隔文件。(CSV / PIPE分隔文件)

示例文件:

Id,Name,Age
1,ads,23
2,dfg,24
2,hgh,25
3,fgh,26
4,fdfgh,27
4,fh,28

我必须在列 ID 上获得重复计数,并且还应创建单独的文件(重复项)。应该创建重复计数和带有重复项的文件。

输出应该看起来像

控制台:它应该打印为

ID : 
2 is repeated 2 times
4 is repeated 2 times

输出文件应该是

ID:
2 is repeated 2 times 
4 is repeated 2 times

这是我的示例代码。

import sys
import csv
import datetime
import time
import os from operator
import itemgetter from collections
import Counter

d = ','
read1 = csv.reader(open('D:\ANACONDS\example.csv','r'),delimiter=d)
sort_src = sorted(read1, key=itemgetter(0))
g = len(list(csv.reader(open('D:\ANACONDS\example.csv'))))
print("the number of records are :" ,g)
ids = Counter()
for row in sort_src:
    ids += Counter([row[0]])
    print(len(list(ids)))

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

当您需要量化类别时,您可以使用直方图,您可以实现 直方图使用简单的词典'。在您的情况下,每个类别的“ID”都可用于汇总文件中出现的频率。我希望下一个代码可以帮助你。

import csv
from operator import itemgetter

histogram = dict()

with open('yourfile.csv', 'r') as f:
    csv_read = csv.reader(f, delimiter=',')    
    sort_src = sorted(csv_read, key=itemgetter(0))
    print("The Number of records:", len(sort_src))
    #    
    for row in sort_src:
        if row[0].isdigit(): #Because you don't want to count headers
            if row[0] in histogram:
                histogram[row[0]] += 1
            else:
                histogram[row[0]] = 1       

    #
for item in sorted(histogram.items()):
    print('ID {0} is repeated {1} times'.format(item[0], item[1]))        


if __name__ == '__main__':
    pass

运行所需输出的代码。     记录数:7,     ID 1重复1次,     ID 2重复2次,     ID 3重复1次,     ID 4重复2次,

顺便说一下,我在你的代码中看到了许多打开的文件和文件的路径。您可以使用上下文管理器,它允许使用更清晰的代码,如果您不打算使用它们,还可以减少导入。

答案 1 :(得分:0)

要仅查看重复的项目,只需修改for循环块,如下所示:

for item in sorted(histogram.items()):
    if(item[1] > 1):
        print('ID {0} is repeated {1} times'.format(item[0], item[1]))