我正在使用分隔文件。(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)))
非常感谢任何帮助。
答案 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]))