Python-在csv文件中显示具有重复值的行

Python-在csv文件中显示具有重复值的行,python,csv,dictionary,Python,Csv,Dictionary,我有一个.csv文件,有几列,其中一列是随机数,我想在那里找到重复的值。如果有-奇怪的情况,但这毕竟是我想要检查的-,我想显示/存储存储这些值的完整行 说清楚一点,我有这样的想法: 首先,无论如何,230,无论如何,等等 第二,无论如何,11,无论如何,等等 第三,无论如何,46,无论如何,等等 第四,无论如何,18,无论如何,等等 第五,无论如何,14,无论如何,等等 第六,无论如何,48,无论如何,等等 第七,无论如何,91,无论如何,等等 第八,无论如何,18,无论如何,等等 第九,无论如

我有一个.csv文件,有几列,其中一列是随机数,我想在那里找到重复的值。如果有-奇怪的情况,但这毕竟是我想要检查的-,我想显示/存储存储这些值的完整行

说清楚一点,我有这样的想法:

首先,无论如何,230,无论如何,等等
第二,无论如何,11,无论如何,等等
第三,无论如何,46,无论如何,等等
第四,无论如何,18,无论如何,等等
第五,无论如何,14,无论如何,等等
第六,无论如何,48,无论如何,等等
第七,无论如何,91,无论如何,等等
第八,无论如何,18,无论如何,等等
第九,无论如何,第67,无论如何,等等

我希望:

第四,无论如何,18,无论如何,等等
第八,随便什么,第十八,随便什么,等等

为了找到重复的值,我将该列存储到字典中,并对每个键进行计数,以发现它们出现了多少次

import csv
from collections import Counter, defaultdict, OrderedDict

with open(file, 'rt') as inputfile:
        data = csv.reader(inputfile)

        seen = defaultdict(set)
        counts = Counter(row[col_2] for row in data)

print "Numbers and times they appear: %s" % counts
我明白了

计数器({'18':2,'46':1,'67':1,'48':1,…})

现在问题来了,因为我无法将密钥与重复链接起来,以后再进行计算。如果我这样做

for value in counts:
        if counts > 1:
            print counts
我会只拿钥匙,这不是我想要的和每一个值(更不用说我希望打印的不仅仅是那个,还有整行…)

基本上我在寻找一种方法

If there's a repeated number:
        print rows containing those number
else
        print "No repetitions"

提前谢谢。

试试这个可能对你有用

entries = []
duplicate_entries = []
with open('in.txt', 'r') as my_file:
    for line in my_file:
        columns = line.strip().split(',')
        if columns[2] not in entries:
            entries.append(columns[2])
        else:
            duplicate_entries.append(columns[2]) 

if len(duplicate_entries) > 0:
    with open('out.txt', 'w') as out_file:
        with open('in.txt', 'r') as my_file:
            for line in my_file:
                columns = line.strip().split(',')
                if columns[2] in duplicate_entries:
                    print line.strip()
                    out_file.write(line)
else:
    print "No repetitions"

您应该按照以下方式创建词典,以避免重复条目相互覆盖:

if(dict.has_key(num) == 0):
     dict[num] = []
     dict[num].append(val)
else:
     dict[num].append(val)

然后循环浏览字典中的每个列表值,如果某个键的值大于1,则它会多次出现。

让我们循环浏览文件两次:

  • 首先,记录每个第三列出现的次数
  • 第二个循环行打印包含第三列的行,该列出现多次
见:

试验
用awk回答好吗?这很直截了当。是的。。。随你的便。我在AWK方面没有任何背景知识,但由于Python是一种多半径语言,也许可以对解决方案进行调整。它完全符合我的要求。谢谢如果您的文件很长,您可以通过将键(列[2])和完整的行保存为元组或dict的重复项来避免重新读取文件。@joelgoldstick在这种情况下,您将错过每个重复项中的第一次出现对不起@Sar009,但是我应该如何将重复项存储到文件中,而不是打印它们?我无法将多行写入一行(或者可能会覆盖每一行)。提前谢谢@Sar009非常感谢,但我已经用我的代码做了。我的问题出现在你提到的循环中,因为我不知道如何同时将键与它出现的次数联系起来。
awk -F, 'FNR==NR{a[$3]++; next}
         {if (a[$3]>1) {print}}' file file
$ awk -F, 'FNR==NR{a[$3]++; next} {if (a[$3]>1) {print}}' a a
Fourth, Whatever, 18, Whichever, etc
Eighth, Whatever, 18, Whichever, etc