Python删除CSV中重复数据

在处理数据时,我们经常会遇到需要删除CSV(逗号分隔值)文件中的重复数据的情况。CSV是一种常见的文件格式,常用于存储和交换数据。Python是一种强大的编程语言,提供了许多功能强大的库来处理数据。本文将介绍如何使用Python删除CSV文件中的重复数据,并提供相应的代码示例。

1. 读取CSV文件

首先,我们需要使用Python的csv库读取CSV文件中的数据。csv库提供了一种方便的方式来解析和处理CSV文件。下面是读取CSV文件的示例代码:

import csv

def read_csv(file_path):
    data = []
    
    with open(file_path, 'r') as file:
        reader = csv.reader(file)
        next(reader)  # 跳过标题行
        
        for row in reader:
            data.append(row)
    
    return data

上述代码中,read_csv函数接受一个文件路径作为参数,并返回一个包含CSV文件数据的列表。该函数使用with open语句打开CSV文件,然后使用csv.reader创建一个读取器对象。读取器对象可以逐行读取CSV文件的数据,并将每一行数据作为一个列表返回。next(reader)语句用于跳过CSV文件的标题行。

2. 删除重复数据

接下来,我们需要使用Python的集合(set)来删除CSV文件中的重复数据。集合是一种无序且不重复的数据结构,可以用于高效地删除重复元素。下面是删除重复数据的示例代码:

def remove_duplicates(data):
    unique_data = []
    seen = set()
    
    for row in data:
        # 将每一行数据转换为元组,以便作为集合的元素
        row_tuple = tuple(row)
        
        if row_tuple not in seen:
            seen.add(row_tuple)
            unique_data.append(row)
    
    return unique_data

上述代码中,remove_duplicates函数接受一个包含CSV文件数据的列表作为参数,并返回一个不含重复数据的新列表。该函数使用一个集合seen来存储已经出现过的数据,以避免重复。对于列表中的每一行数据,我们将其转换为元组row_tuple,然后使用if row_tuple not in seen条件判断该行数据是否已经出现过。如果没有出现过,则将其添加到集合seen和新列表unique_data中。

3. 写入CSV文件

最后,我们需要使用Python的csv库将处理后的数据写入新的CSV文件。下面是写入CSV文件的示例代码:

def write_csv(file_path, data):
    with open(file_path, 'w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(["Column 1", "Column 2", "Column 3"])  # 写入标题行
        
        for row in data:
            writer.writerow(row)

上述代码中,write_csv函数接受一个文件路径和数据列表作为参数,并将数据写入CSV文件。函数使用with open语句打开CSV文件,然后使用csv.writer创建一个写入器对象。写入器对象可以逐行写入数据到CSV文件中。writer.writerow(["Column 1", "Column 2", "Column 3"])语句用于写入CSV文件的标题行。然后,我们使用一个循环遍历数据列表,将每一行数据写入CSV文件。

完整示例代码

下面是一个完整的示例代码,演示了如何使用上述函数来删除CSV文件中的重复数据:

import csv

def read_csv(file_path):
    data = []
    
    with open(file_path, 'r') as file:
        reader = csv.reader(file)
        next(reader)  # 跳过标题行
        
        for row in reader:
            data.append(row)
    
    return data

def remove_duplicates(data):
    unique_data = []
    seen = set()
    
    for row in data:
        row_tuple = tuple(row)
        
        if row_tuple not in seen:
            seen.add(row_tuple)
            unique_data.append(row)
    
    return unique_data

def write_csv(file_path, data):
    with open(file_path, 'w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(["Column 1", "Column 2", "Column 3