Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
键列CSV文件python 3上的重复计数_Csv_Python 3.x_Duplicates - Fatal编程技术网

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

键列CSV文件python 3上的重复计数,csv,python-3.x,duplicates,Csv,Python 3.x,Duplicates,我正在使用分隔文件。(CSV/管道分隔文件) 示例文件: 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

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

示例文件:

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)))

任何帮助都将不胜感激。

当您需要量化类别时,您可以使用直方图,您可以实现 使用简单的“dict”绘制直方图。每个类别(在您的案例中为“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次


顺便说一句,我在代码中看到了很多open和文件路径。您可以使用上下文管理器,该管理器允许使用更干净的代码,如果您不打算使用它们,则可以减少导入。

若要仅查看重复项,请仅修改for循环块,如下所示:

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

缩进在Python中很重要-请修复问题中的代码格式。另外,请提供您从代码中获得的示例输入的实际输出,以便与您想要的输出进行比较。谢谢..这就是我想要的。在上面的代码中,我们正在打印所有记录(包括重复记录和非重复记录)。我只想打印重复的ID,忽略不同的ID。关于这一点,请指导我?当然是的,您只需要修改最后一个“for循环”,方法是添加一个if as follow“if(item[1]>1):print('ID{0}重复了{1}次。format(item[0],item[1]),这是为了检查是否有超过1次的事件发生。我希望这个小小的修改能对你有所帮助。