【问题标题】:Finding total number of duplicates in CSV file查找 CSV 文件中的重复项总数
【发布时间】:2016-11-03 03:54:22
【问题描述】:

我正在解析一个 CSV 文件,需要您的帮助。我的 CSV 文件中有重复项。我想告诉 Python 向我提供重复地址的总数和唯一地址的总数,然后列出它们。我已经成功到达地址显示它是唯一还是重复的部分,但现在我想告诉 Python 也向我提供受尊重的数字。

import csv

csv_data = csv.reader(file('T:\DataDump\Book1.csv'))

next(csv_data)

already_seen = set()

for row in csv_data:
    Address = row[6]
    if Address in already_seen:
        print('{} is a duplicate Address'.format(Address))
    else:
        print('{} is a unique Address'.format(Address))
        already_seen.add(Address)

【问题讨论】:

  • 有很多方法。当您打印它是重复值时,您可以增加一个值。您可以将always_seen 的长度与文件的长度进行比较。
  • 谢谢摩根,你能提供一些我可以用作示例的代码吗?我是编程新手,所以还在学习。
  • 在循环外声明一个变量,例如duplicate = 0,然后在你做if address in already_seen:的同一个块中,做duplicate += 1

标签: python csv


【解决方案1】:

您可以通过 1 次唯一通过即时检测重复,但您必须完全阅读文件以了解它是否不是重复并计算有多少重复。

所以这里需要 2 次通行证。像这样使用collections.Counter

import csv
import collections

with open(r"T:\DataDump\Book1.csv") as f:
    csv_data = csv.reader(f,delimiter=",")

    next(csv_data)  # skip title line

    count = collections.Counter()

    # first pass: read the file
    for row in csv_data:
        address = row[6]
        count[address] += 1

    # second pass: display duplicate info & compute total
    total_dups = 0
    for address,nb in count.items():
        if nb>1:
            total_dups += nb
            print('{} is a duplicate address, seen {} times'.format(address,nb))
        else:
            print('{} is a unique address'.format(address))
    print("Total duplicate addresses {}".format(toal_dups))

要打印您也可以直接执行的重复地址总数:

    print("Total duplicate addresses {}".format(sum(x for x in count.values() if x > 1)))

【讨论】:

  • 感谢 Jean,当我运行脚本时,您建议它显示错误。回溯(最后一次调用):文件“C:/Users/Programming/addreesss.py”,第 4 行,在 中,open(r"'T:\DataDump\Book1.csv'") as f: IOError : [Errno 22] 无效模式 ('r') 或文件名: "'T:\\DataDump\\Book1.csv'"
  • 对不起,引号太多(我在不同的输入文件下测试过)。现在修好了。 PS:注意r 前缀,以便能够使用反斜杠而不解释它们。
  • 不必必须完全阅读文件以确定某些内容是否重复,但是如果您想计算找到的文件总数,则可以这样做.
  • @martineau:对。我会编辑。我的意思是你必须在打印“这不是重复的”之前完整阅读文件:)
  • 感谢 Jean,此代码运行良好。它告诉我 CSV 文件中有多少次地址。无论如何我可以在顶部有所有重复项的总数,然后是详细信息(我有这个)。
【解决方案2】:

使用这个:

my_dict = { i:My_List.count(i) for i in My_List}

它将返回每个实例的计数,包括重复项

【讨论】:

    【解决方案3】:

    这应该就像用字典来存储地址计数一样简单:

    import csv
    
    csv_data = csv.reader(file('T:\DataDump\Book1.csv'))
    next(csv_data)
    
    address_count = {}
    
    for row in csv_data:
        Address = row[6]
        if Address in address_count.keys():
            print('{} is a duplicate Address'.format(Address))
            address_count[Address] = address_count[Address] + 1 
        else:
            print('{} is a unique Address'.format(Address))
            address_count[Address] = 1 
    
    print address_count
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-28
      • 2011-05-04
      • 2016-06-06
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 2012-03-02
      相关资源
      最近更新 更多