Python 删除CSV文件中的重复行

Python 删除CSV文件中的重复行,python,csv,Python,Csv,我有下面的python函数,可以将JSON数据导出到CSV文件,它工作得很好-键(CSV头)和值(CSV行)填充在CSV中,但我正在尝试删除CSV文件中重复的行 如何在python中删除重复的值,而不是在Excel中手动删除它们 def toCSV(res): with open('EnrichedEvents.csv', 'w', newline='', encoding='utf-8') as csvfile: fieldnames = ['proc

我有下面的python函数,可以将JSON数据导出到CSV文件,它工作得很好-键(CSV头)和值(CSV行)填充在CSV中,但我正在尝试删除CSV文件中重复的行

如何在python中删除重复的值,而不是在Excel中手动删除它们

 def toCSV(res):
        with open('EnrichedEvents.csv', 'w', newline='', encoding='utf-8') as csvfile:
            fieldnames = ['process_hash', 'process_name', "process_effective_reputation"]
            dict_writer = csv.DictWriter(csvfile, fieldnames=fieldnames,extrasaction='ignore')
            dict_writer.writeheader()
            for r in res:
                dict_writer.writerow(r)
多谢各位

例如,在csv中,apmsgfwd.exe信息上的重复行

重复数据如下:

process_hash    process_name    process_effective_reputation
['f810a809e9cdf70c3189008e07c83619', '58d44528b60d36b515359fe234c9332ccef6937f5c950472230ce15dca8812e2']    c:\windows\system32\delltpad\apmsgfwd.exe   ADAPTIVE_WHITE_LIST
['73ca11f2acf1adb7802c2914e1026db899a3c851cd9500378c0045e0']    c:\users\zdr3dds01\documents\sap\sap gui\export.mhtml   NOT_LISTED
['f810a809e9cdf70c3189008e07c83619', '58d44528b60d36b515359fe234c9332ccef6937f5c950472230ce15dca8812e2']    c:\windows\system32\delltpad\apmsgfwd.exe   ADAPTIVE_WHITE_LIST
['f810a809e9cdf70c3189008e07c83619', '58d44528b60d36b515359fe234c9332ccef6937f5c950472230ce15dca8812e2']    c:\windows\system32\delltpad\apmsgfwd.exe   ADAPTIVE_WHITE_LIST
['582f018bc7a732d63f624d6f92b3d143', '66505bcb9975d61af14dd09cddd9ac0d11a3e2b5ae41845c65117e7e2b046d37']    c:\users\jij09\appdata\local\kingsoft\power word 2016\2016.3.3.0368\powerword.exe   ADAPTIVE_WHITE_LIST
json数据:

[{'device_name': 'fk6sdc2', 'device_timestamp': '2020-10-27T00:50:46.176Z', 'event_id': '9b1bvf6e17ee11eb81b', 'process_effective_reputation': 'LIST', 'process_hash': ['bfc7dcf5935830f3a9df8e9b6425c37a', 'ca9f3a24506cc518fc939a33c100b2d557f96e040f712f6dd4641ad1734e2f19'], 'process_name': 'c:\\program files (x86)\\toh122soft\\thcasdf3\\toho34rce.exe', 'process_username': ['JOHN\\user1']}, {'device_name': 'fk6sdc2', 'device_timestamp': '2020-10-27T00:50:46.176Z', 'event_id': '9b151f6e17ee11eb81b', 'process_effective_reputation': 'LIST', 'process_hash': ['bfc7dcf5935f3a9df8e9b6830425c37a', 'ca9f3a24506cc518fc939a33c100b2d557f96e040f712f6dd4641ad1734e2f19'], 'process_name': 'c:\\program files (x86)\\oft\\tf3\\tootsice.exe', 'process_username': ['JOHN\\user2']}, {'device_name': '6asdsdc2', 'device_timestamp': '2020-10-27T00:50:46.176Z', 'event_id': '9b151f698e11eb81b', 'process_effective_reputation': 'LIST', 'process_hash': ['9df8ebfc7dcf5935830f3a9b6425c37a', 'ca9f3a24506cc518ff6ddc939a33c100b2d557f96e040f7124641ad1734e2f19'], 'process_name': 'c:\\program files (x86)\\toht\\th3\\tohce.exe', 'process_username': ['JOHN\\user3']}]

下面是显示如何筛选重复项的独立示例。其思想是获取每个dict的值并将其转换为元组。使用一个集合,我们可以过滤掉重复的内容

import csv

csv_columns = ['No', 'Name', 'Country']
dict_data = [
    {'No': 1, 'Name': 'Alex', 'Country': ['India']},
    {'No': 1, 'Name': 'Alex', 'Country': ['India']},
    {'No': 1, 'Name': 'Alex', 'Country': ['India']},
    {'No': 1, 'Name': 'Alex', 'Country': ['India']},
    {'No': 2, 'Name': 'Ben', 'Country': ['USA']},

]
csv_file = "Names.csv"

with open(csv_file, 'w', newline='') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
    writer.writeheader()
    entries = set()
    for data in dict_data:
        val = tuple(','.join(v) if isinstance(v, list) else v for v in data.values())
        if val not in entries:
            writer.writerow(data)
            entries.add(val)
print('done')
Names.csv

 No,Name,Country
1,Alex,['India']
2,Ben,['USA']

是否有必要使用上述方法,如果没有,那么我通常使用熊猫库来读取csv文件

import pandas as pd

data = pd.read_csv('EnrichedEvents.csv')
data.drop_duplicates(inplace=True)

data.to_csv('output.csv',index=False)

分享一个csv示例并定义“复制”谢谢balderman,我已经添加了csv文件的屏幕截图,请不要上传图像-将csv(或其子集)添加为文本。为什么不上传文本图像:很抱歉,我已经在文本中添加了csv数据谢谢balderman,很抱歉我应该在前面提到,如果'res'变量包含dict列表(json数据)@user3704597,您如何使用您的方法?您好,balderman,我得到以下错误:如果r不在r_集中:TypeError:Unhable type:'dict'谢谢您帮助我解决balderman,我尝试了上面的新代码。但是现在我得到了下面的错误(我认为这是因为有列表类型的值-例如印度在[india]),如果val不在条目中:TypeError:Unhabable type:'list'@PranavHosangadi OK-添加了解释。